提纲
1.n和n+1的关系
结论必须由一个整数n决定
结论的定义必须明确,这样我们才可能检验由第n项过渡到下一项也就是n+1的时候,结论是否还能成立。
我们期望得到这样一个结果:
只要这个结论对n成立,那么对n+1也成立。所以我们要做的有两件事,一是证实结论在取某个值时是正确的,二就是证实取下一个值也是正确的。
我们考虑,如果取某个值,那么这个值取什么数好呢?很显然,什么事情我们都希望从最简单的情况出发,因此取1就是我们的选择,也就是n=1。
因此n=1时成立,所以n+=1,也就是n=2的时候也成立,同理,n=3的时候也成立。从任意整数过渡到下一个,我们就普遍的证明了这个结论。普遍的证明说明已经遍历了所有情况,类似于遍历一个集合,我们也只需要得到头结点(n=1),然后也是next,然后再next……就可以把整个集合遍历。
我们经常使用这一手段去证明一些东西,因此应该给它取一个名字比较好。叫什么呢?直观点干脆就叫做“从n到n+1的证明”,叫”证明下一个整数也是对的“也可以。可惜,专业的名称叫做”数学归纳法“。
名字是随便起的,其实并不重要。我们要理解的是背后这一过程。
2.斐波那契数列
用数组显式的表示前后位置关系
long Fib(int n) { var list = new List<int>(); list[0] = 0; list[1] = 1; for(var i = 2; i < n; i++) { list[i] = list[i-1] + list[i-2]; } return list[n-1]; }
递归是用调用栈隐式的表示位置的前后关系
3.尾递归