递归函数定义
递归函数可以通过将复杂的问题分解成相同类型的子问题。这个分解过程在到达一个基本情况时就停止了,也就是说,一个简单的子问题足以被直接解决。
接下来,我们以一个简单例子回顾一下递归函数。
如:现有五位同学前后坐一列,第五个同学说“我比第四个同学大两岁”,第四个同学说““我比第三个同学大两岁”,第三个同学说““我比第二个同学大两岁”,第二个同学说““我比第一个同学大两岁”,第一个同学说““我今年10岁了”。问:第五个同学多大?
解析:
根据题意,前者比后者大两岁,则一步步计算可知,转化成算法,也就是直译,代码如下:
int Age(int n)//第n个人的年龄
{
if(n == 1)
return 10;
else
return 2+Age(n-1);
}
当然,第一次写也不太会很懂,但你可以继续往下看,如图为递归函数入栈示意图。
递归函数入栈示意图。当想要知道第五位同学的年龄时,从函数顶部开始运行,发现其需要调用第四个同学年龄,于是,把栈帧Age(5)放到栈中;函数又从顶部开始运行,发现第四位同学的年龄需要调用第三位同学的年龄,于是,把栈帧Age(4)放到栈中;函数又从顶部开始运行......直到第五位同学时,函数从顶部运行,到tmp=10停止。到这里程序只进行了一半,还需要回调函数,可是怎末回调呢?这又是一个问题。不过,别急,下面是递归函数出栈示意图。
上面说到了第一位同学的年龄是10岁。紧接着可以发现,栈中已经存放了五个中间值,分别是五位同学的,当第一位同学的年龄已知后,便把Age(1)从栈内存中释放出去;函数随之调用栈中Age(2),通过计算后释放其在栈中的内存;以此类推,最终可以得到第五位同学的年龄。
结果
第五位同学的年龄为18岁。
谢谢观看,可以的话给个小心心哦。