#include <stdio.h>
int getPeachNumber(n)
{
int num; //定义所剩桃子数
if(n==10)
{
return 1; //递归结束条件
}
else
{
num = (getPeachNumber(n+1)+1)*2; //这里是不应该用递归呢?
printf("第%d天所剩桃子%d个\n",n ,num); //天数,所剩桃子个数
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
题目问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。
首先,你定义了一个函数来帮你计算在某天还剩多少桃子,这个函数的名字叫 getPeachNumber(n)。这个函数里面有一个参数 n,用n来表示第几天。比如n=10,就表示第十天,n=9,就表示第九天。
然后,这个问题是让我们求桃子的数量,所以你还需要定义一个参数 num,用来定义所剩桃子数量。
根据题目要求,第n天桃子的数量干掉一半再减去一个,就是第n+1天的桃子数量。所以 第n+1天桃子数量先加1再乘2,就是第n天的桃子数量。
已知第10天时候桃子数量为1。所以getPeachNumber(10)=1。
同理,第9天所剩桃子数量 num = getPeachNumber(9) = (getPeachNumber(10)+1)*2
第8天所剩桃子数量 num = getPeachNumber(8) = (getPeachNumber(9)+1)*2
以此类推.........
int getPeachNumber(n) //定义函数,n表示第几天
{
int num; //定义所剩桃子数
if(n==10) //条件判断如果在第10天的时候,
{
return 1; //递归结束条件(就是题目中给的已知条件,第10天时候桃子还剩1个)
}
else //判断条件,在不是第十天的时候
{
num = (getPeachNumber(n+1)+1)*2; //函数中自己调用自己,就是递归。看最后回答你的第二个问题。
printf("第%d天所剩桃子%d个\n",n ,num); //打印语句,打印每天所剩桃子数 }
return num; //将num的值返回给函数。
}
int main() //程序主函数
{
int num = getPeachNumber(1); //这里要通过你定义的函数来计算,在第一天时候桃子数量。
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
num = (getPeachNumber(n+1)+1)*2; //函数中自己调用自己,就是递归。这里回答你的第二个问题。
本题中的运算基本集中在这里。例如,要想求n=9时候的num值,需要根据n=10的num值来计算,getPeachNumber(9) = (getPeachNumber(10)+1)*2;求n=8时候的num值,需要根据n=9的num值来计算,第8天所剩桃子数量 num = getPeachNumber(8) = (getPeachNumber(9)+1)*2。以此类推,相求第n天的num值,需要根据第n+1天的num值来计算。每计算一次,都需要调用一次这个函数。
num = getPeachNumber(n)=(getPeachNumber(n+1)+1)*2
不论num,还是getPeachNumber(n),都看做是一个字就可以,他的原理很简单,
a =(b+1)*2; b=(c+1)*2; c=(d+1)*2; d=1。让你求a。