猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
#include <stdio.h>
int eat(int);
int main() {
// int x1,x2 = 0;
// x1 = 1;
// for(int i = 9;i>0;i--){
// x2 = (x1+1)*2;
// x1 = x2;
// }
// printf("%d",x2);
int x = eat(10);
printf("%d",x);
return 0;
}
int eat(int n){
if( n == 1){
return 1;
}else{
return 2*(eat(n-1)+1);
}
} //递归法
#include<stdio.h>
int eat(int i);
int main(){
int n=eat(10);
printf("第一天共摘桃子:%d个",n);
return 0;
}
int eat(int i){
if (i==1)
return 1;
else
return 2*(eat(i-1)+1);
}
//非递归法,从第十天反向思考。设当天的桃子为x,则前一天的桃子为 2*(x+1)
/*
#include<stdio.h>
int main(){
int x=1;
for(int i=0;i<9;i++)
x=2*(x+1);
printf("第一天共摘桃子:%d个",x);
return 0;
}
*/ #include<stdio.h>
int TotalPeaches(int,int); //函数原型
int TotalPeaches(int peaches,int days)
{
if(days==1)
return peaches;
--days;
return TotalPeaches((peaches+1)*2,days); //每一天是前一天的 一半零一个
}
int main()
{
int peach=1;
peach=TotalPeaches(peach,10);
printf("Total :%d\n",peach);
return 0;
}