递归函数
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)函数
网上看到一个题目:有一堆桃子,猴子每天吃一半后再多吃一个,到第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
相关文章推荐
- delphi中递归算法构建treeView(查询数据库在递归函数内部)
- 递归函数的复杂度分析zz
- delphi中父母表示法递归构造treeview(在递归函数之外查询数据库)
- Lambda表达式与递归函数相关文章导读
- 递归函数最终会结束
- 【F#2.0系列】定义递归函数
- java递归函数
- 递归函数和非递归函数的转变
- 第二周上机任务1-1--编写递归函数将十进制数转换成二进制数输出(改进版)
- 递归函数调用递归函数
- C++ Primer Plus 中第七章的递归函数,我终于看懂了。。。。
- 递归函数
- 数理逻辑:公理化算术(9)递归函数
- 【转】递归函数时间复杂度分析
- 绘制分支[置顶] python学习~递归函数
- 递归函数终止方式
- Java递归函数
- 编写一个递归函数,求一个整数的2进制形式
- 递归函数一定要弄清楚这个函数是做什么用的,基于什么条件返回什么结果!