2020.12.29使用递归函数解决猴子吃桃问题
题目如下:特别鸣谢CSDN用户 OMG_Python提供思路猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?利用 递归函数编写程序,并反向打印每天所剩桃子数。试写出递归函数 完成题目的功能。函数原型:int getPeachNumber
文章共860字 · 阅读需要大约3分钟
一键AI生成摘要,助你高效阅读
问答
·
题目如下:
*OMG_Python提供思路
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?
利用 递归函数编写程序,并反向打印每天所剩桃子数。试写出递归函数 完成题目的功能。
函数原型:int getPeachNumber(int n);
递归函数思路即反复调用函数本身,虽然要求解的对应天数不同,但一般要求使用递归函数的题目都会给出一个确定的、已知的结果,该结果可用作递归结束的条件(如本题中已知第10天只剩下了一个桃子)。
#include <stdio.h>
int getPeachNumber(int n)
{
//n-天数,num-剩余的桃子数
int num;
if(n==10) //递归函数的结束条件
{
num=1;//第十天只剩下一个桃子;
printf("第%d天所剩桃子%d个\n",n,num);
}
else
{
num=2*(getPeachNumber(n+1)+1);//从9倒序到1重复调用该函数
printf("第%d天所剩桃子%d个\n",n,num);
}
return num;//将返回值传给主函数
//函数名+括号:fn1()==return后面的值
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
一开始我不理解递归函数的原理,明明没有使用for函数,为什么程序依然能执行到结束指令呢?看完课本,原来原理如图所示:
n==10,num=1是确定的,可作为结束条件,程序先回溯(即套娃),反复调用函数本身,直到找到一个确定的值为止。再从这个确定的值实现递推回去,输出结果。
(从1-10,再从10-1,规定了递推函数的范围)。
结果如图:
peace.
更多推荐
已为社区贡献1条内容
所有评论(0)