猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。这是怎么来的?
num = (getPeachNumber(n+1)+1)*2;
num = (getPeachNumber(n+1)+1)*2;
2016-10-26
我来谈谈理解吧,也是看了好些视频和上面这位大神的答案才明白的
#include <stdio.h> int getPeachNumber(n)//注释1:下面会有解释 { int num; //定义所剩桃子数 if(n==10)//注释2:下面会有解释 { return 1; } else { num = (getPeachNumber(n+1)+1)*2; //注释3,下面会有解释 printf("第%d天所剩桃子%d个\n",n,num); } return num; } int main() { int num = getPeachNumber(1); printf("猴子第一天摘了:%d个桃子。\n", num); return 0; }
注释1:getPeachNumber(n),这个当中的(n)代表的是天数
注释2:当n等于10的时候,输出1,//第十天的时候,还剩1个桃子
注释3:第1天的桃子数量,现在我们不知道,但是我们知道第1天的桃子等于第2天的桃子数量加1乘以2,用公式表达就是(n+1)这个是天数,(n+1)+1这个是第2天的桃子数量+1,((n+1)+1)*2这个是第2天的桃子数量+1然后乘以2,但是第二天的剩余的桃子数量现在也不知道,程序会继续按照这个公式往下走,一直到n==10,这个时候就知道了,第10天剩余1个桃子,现在程序就可以算出第9天等于((1+1)+1)*2等于4,然后这个公式继续往下走,就能算出第8天等于((4)+1)*2,一直到最后算出第1天的出来,打印的顺序是,先算出那个,就打印哪个
写的有点乱,这个能看懂吗。。。
举报