猴子吃桃問題

題目描述
猴子吃桃問題。猴子第一天摘下若干個桃子,立即吃了一半,還不過癮,又多吃了一個。 次日早上又將剩下的桃子吃掉一半,又多吃一個。之後天天早上都吃了前一天剩下的一半零一個。 到第N天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。
輸入
N
輸出
桃子總數
樣例輸入
10
樣例輸出
1534


問題分析:
1,利用遞歸思想解決:
  
 1 #include<stdio.h>
 2 int eat(int N);
 3 int main()
 4 {
 5     int N,num;
 6     scanf("%d",&N);
 7      printf("%d",eat(N));
 8     return 0;
 9 }
10 int eat(int N)
11 {
12     if(N==1) return 1;
13         while(N!=1)
14      {
15          return (eat(N-1)+1)*2;
16          N-1;
17      }
18 }
 
  

將N理解爲天數,從前日後思考,每一天都是前一天+1後的兩倍,且第一天只有一個桃子且沒有吃,因此遞歸N-1次;spa

2,用for循環解code

1 include <stdio.h>
2 void main()
3 {int n,s=1,i;//n爲天數,s爲最後留下的
4 scanf(「%d」,&n);
5 for(i=0;i<n-1;i++)
6 s=(s+1)*2;
7 printf(「%d」,s);
8 }

思路和遞歸的思想相似,也是反向思惟,從第一天日後推,當天數少時遞歸和for循環效率應該差很少,但當天數很大時遞歸會出現錯誤,具體緣由我還沒理解,我推測是C語言最大值溢出了。blog

相關文章
相關標籤/搜索