来自于:http://www.jb51.net/article/38051.htm
http://blog.csdn.net/Neil_Wesley/article/details/51484026
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
思路分析:
采用逆向思维,从后往前推断,发现其中有相同的地方,即出现递推公式,可以采用递归方法。
令S10=1,容易看出S9=2(S10+1),简化一下
S9=2S10+2
S8=2S9+2
…..
Sn=2Sn+1+2
下面我将解决这个问题。(第一种为普通循环方式,第二种为递归方式)
方法一:while
#include<stdio.h> int main() { int day,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day--; } printf("the total is %d ",x1); }
方法二:递归
#include<stdio.h> int sumPeach(int day); int main() { int sum; sum=sumPeach(1); printf("%d",sum); } int sumPeach(int day) { if(day==10) { return 1; } else return 2*sumPeach(day+1)+2; }