您的位置:首页 > 编程语言 > C语言/C++

递归函数

2017-10-30 15:49 169 查看
递归给人的感觉总是很高大上,个人感觉再多的理论知识都不如一个完美的例子,不喜勿喷。

网上看到一个题目:有一堆桃子,猴子每天吃一半后再多吃一个,到第5天时剩余一个桃子,求第一天的个数。

前一天 = ( 后一天 + 1 ) * 2;  

例如:第4天 = ( 第5天 + 1 ) * 2 = ( 1 + 1) * 2 = 4;

代码如下:

/*************************************************************
有一堆桃子,猴子每天吃一半后再多吃一个,到第5天时剩余一个桃子
*************************************************************/

#include <stdio.h>

int recursion(int day)
{
int total;

if (day == 5)
{
return 1;
}
else if (day < 5)
{
day++;
total = (recursion(day) + 1) * 2;
return total;
}
}

int main(void)
{
int i;

for (i=1;i<=5;i++)
printf("第%d天有%d个桃子\n", i, recursion(i));

return 0;
}

运行结果:

第1天有46个桃子

第2天有22个桃子

第3天有10个桃子

第4天有4个桃子

第5天有1个桃子

请按任意键继续. . .

下面开始逐步讲解高大上的递归:

recursion(1)

进入int recursion(int day)函数
day = 1; day < 5; day++; day = 2; total = ( recursion(2) + 1 ) * 2;      //第1天桃子个数未知
day = 2; day < 5; day++; day = 3; total = ( recursion(3) + 1 ) * 2;      //第2天桃子个数未知
day = 3; day < 5; day++; day = 4; total = ( recursion(4) + 1 ) * 2;      //第3天桃子个数未知
day = 4; day < 5; day++; day = 5; total = ( recursion(5) + 1 ) * 2;      //第4天桃子个数未知
day = 5; day == 5; return 1;                                             //第5天桃子个数为1(已知)
recursion(5) = 1;  total = ( recursion(5) + 1 ) * 2 = 4;  return total ; //第4天桃子个数为4
recursion(4) = 4;  total = ( recursion(4) + 1 ) * 2 = 10; return total ; //第3天桃子个数为10
recursion(3) = 10; total = ( recursion(3) + 1 ) * 2 = 22; return total ; //第2天桃子个数为22
recursion(2) = 22; total = ( recursion(2) + 1 ) * 2 = 46; return total ; //第1天桃子个数为46
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息