題目:猴子第一天摘了若干個桃子,當即吃了一半,還不解饞,又多吃了一個;第二天,喫剩下的桃子的一半,還不過癮,又多吃了一個;以後每天都喫前一天剩下的一半多一個,到第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);
}
三、運行結果
以上三種方法的運行結果都是: