题目如下:
*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.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐