问题:有一只猴子第一天摘下了若干个桃子,当即吃掉了一半,觉得不过瘾又多吃了一个;
第二天又将剩下的桃子吃掉了一半,还不过瘾又多吃了一个;按照这个吃法,每天都吃掉前一天剩下的一半又多一个。
到了第十天,就剩下了一个桃子 问:这只猴子第一天摘下了多少个桃子
目标:熟悉递归思想及求解简单递归问题的算法步骤
掌握递归函数定义、递归函数调用、递归函数声明等基本概念
掌握函数的嵌套调用与递归调用
/*猴子吃桃问题(递归)*/
/*问题:有一只猴子第一天摘下了若干个桃子,当即吃掉了一半,觉得不过瘾又多吃了一个;
第二天又将剩下的桃子吃掉了一半,还不过瘾又多吃了一个;按照这个吃法,每天都吃掉前一天剩下的一半又多一个。
到了第十天,就剩下了一个桃子 问:这只猴子第一天摘下了多少个桃子*/
/*目标:熟悉递归思想及求解简单递归问题的算法步骤
掌握递归函数定义、递归函数调用、递归函数声明等基本概念
掌握函数的嵌套调用与递归调用*/
#include <stdio.h>//头文件
int fun(int n, int k)//递归函数定义 fun函数 int n,k两个整型变量
{ //fun(n,k)参数n表示第n天剩余的桃子树 参数k表示第k天剩余的桃子数为1
int sum;//定义一个整型变量sum
if (n == k)//if语句 如果n等于k的话就执行下面语句
{
sum = 1;//将1赋值给sum
}
else//否则
sum = 2 * (fun(n + 1, k) + 1);//调用递归函数 函数里面再调用函数
return sum;//返回 sum
}
/* 若输入k=4
第一次 n=1 k=4 执行else sum=2*(fun(2,4)+1)
第二次求fun(2,4)
第三次求fun(3,4)
第四次求fun(4,4) 此时4=4 执行if语句 sum=1 */
void main()//主函数
{
int k = 10, sum = 0;//定义两个整型变量 k,sum
printf("请输入猴子吃桃子的天数\n请输入k=");//提示 此处输入猴子吃桃子的天数 下行提示输入k值
scanf_s("%d", &k);//输入k的值 输入猴子吃桃子的天数
sum = fun(1, k);//调用fun递归函数 1表示第一天剩余的桃子树 k表示第k天剩余的桃子数为1
printf("猴子第一天摘桃子为=%d",sum);//打印最终的结果 猴子第一天摘的桃子数为多少
}