来自于: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\n",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;
}