递归
什么是递归
简单说,当函数直接或间接地调用了自己,则发生了递归
递归不一定适用于所有情况,很多情况用迭代比递归更有效,其次,相对来说递归的效率通常要低于迭代得实现,同时,内存占用也会更大。
实现递归的方法
Paul Graham提到一种方法
1.当n是0、1时,结果正确
2.假设函数对于n是正确的,函数对n+1结果也正确
如果两点成立,我们知道这个函数对于所有可能的都是正确的
递归的问题
示例
菲波那切数列
|
|
汉诺塔
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
1.每次只能移动一个圆盘.
2.大盘不能叠在小盘上面.
思路: 当N个圆盘在A上,我们已经找到办法将其移动到C杠上,我们怎么移动N+1个圆盘到C杠上呢?很简单,我们首先用将N个圆盘移动到C上的方法将N个圆盘都移动到B上,然后再把第N+1个圆盘(最后一个)移动到C上,再用同样的方法将B杠上的N个圆盘移动到C上,问题解决。
|
|