当前位置:   article > 正文

趣味算法------猴子吃桃(循环,递归双重解法)

趣味算法------猴子吃桃(循环,递归双重解法)

题目描述


猴子第一天摘下若干个桃子,当天吃了一半,后面又多吃一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。后面每天猴子都吃了前一天剩下的一半零一个。到第十天想再吃时,只剩下一个桃子。求第一天共摘了多少桃子。

输入格式
无。

输出格式
一个整数。

解题思路:

        这个题目可以使用递归求或者循环求和解出。

        循环求和:

            我们可以初始化 n 为最后一天的桃子数目 1,然后经过一次循环让n变成倒数第二天的桃子数目 n = 2*(n+1),重复循环9次得到最初的桃子数目。

        递归求和:

        因为我们知道当天的桃子数目为前一天的桃子数目加上1再乘以二倍。所以递归函数的返回值为 2*(fun(n-1)+1),fun(n)表示第n天的桃子数目,退出递归的边界条件为n==1时返回1。

具体代码:

循环方案代码:

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. int n = 1,i;
  5. for(i = 0;i<9;i++)
  6. {
  7. n = 2*(n+1);
  8. }
  9. printf("%d",n);
  10. }

递归方案代码:

  1. #include<stdio.h>
  2. int fun(int n)
  3. {
  4. if(n == 1)
  5. return 1;
  6. return 2*(fun(n-1) + 1);
  7. }
  8. int main(void)
  9. {
  10. printf("%d",fun(10));
  11. }

总结:

        解题的方法很简单,但是这道题反映了一个算法的经典的思想,已知结果求初始过程。

实则这道题也有其他的变种,比如老鼠藏奶酪问题。而且这道题也并不局限10天。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1021251
推荐阅读
相关标签
  

闽ICP备14008679号