题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第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 );
}
三、运行结果
以上三种方法的运行结果都是: