猴子吃桃问题

题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾,又多吃了一个。 次日早上又将剩下的桃子吃掉一半,又多吃一个。之后天天早上都吃了前一天剩下的一半零一个。 到第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

相关文章
相关标签/搜索