猴子吃桃问题。猴子第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; }