---------------start reading----------------
前言
递归在数学证明中经常使用,其意就是不停的套用同一模板逐渐归纳出最后的结果,用通俗的话来说就是自己调用自己。
递归调用需要注意三个问题
- 缩小问题规模
- 边界条件
- 返回段
我们来看看递归的入门题
有五个人年龄不等
第五个人说,我比第四个人大两岁;
第四个人说,我比第三个人大两岁;
第三个人说,我比第二个人大两岁;
第二个人说,我比第一个人大两岁;
在以前我们可以用循环来实现,功能代码如下
int Age1(int n)//O(n),O(1)
{
int age = 10;
for(int i=1;i<n;i++)
{
age += 2;
}
return age;
}
现在我们来用递归实现,功能函数如下
int Age(int n)//O(n),O(n)
{
int tmp;
if(n == 1)
tmp = 10;
else
tmp = Age(n-1) + 2;
return tmp;
}
递归实现的思路其实是这样的
想要知道第五个人的年龄,就要先知道第四个人的年龄;
想要知道第四个人的年龄,就要先知道第三个人的年龄;
想要知道第三个人的年龄,就要先知道第二个人的年龄;
想要知道第二个人的年龄,就要先知道第一个人的年龄。
知道了第一个人的年龄就可以算出第二个