题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
———-
一、思路分析:
采用逆向思维,从后往前推断,发现其中有相同的地方,即出现递推公式,可以采用递归方法。
令S10=1,容易看出S9=2(S10+1),简化一下
S9=2S10+2
S8=2S9+2
…..
Sn=2Sn+1+2
下面我将采用三种方式解决这个问题。(前两种为普通循环方式,第三种为递归方式)
二、代码讲解
1、方法一(while语句)
我以while语句为例,do while等也可以实现,留给读者自己思考、修改
#include<stdio.h>
int main()
{
int day=9,x1=0,x2=1;
while (day>0)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
printf("The first day of picking peaches number is:%d\n",x1);
}
2、方法二(for循环)
#include<stdio.h>
int main()
{
int day=9,x1=0,x2=1;
for(;day>0;day--)
{
x1=(x2+1)*2;
x2=x1;
}
printf("The first day of picking peaches number is:%d\n",x1);
}
3、方法三(递归方法)
方法三:
#include "stdio.h"
int sumPeach(int day)
{
if (day == 10)
return 1;
else
return 2 * sumPeach(day + 1) + 2;
}
int main()
{
int sum;
sum=sumPeach(1);
printf("The first day of picking peaches number is:%d\n",sum);
}
三、运行结果
以上三种方法的运行结果都是:
