猴子摘桃问题?求大神解释

来源:5-8 递归函数(二)

三国马超

2016-01-14 13:47

猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。



写回答 关注

3回答

  • qq_张_9
    2017-10-31 12:55:12

    i=10

    s=1

    for i in range(10):

        i=s+1+1

        s=s+i

        print(i)

    print(s)

       

    Python 

    qq_张_9

    i=1

    2017-10-31 12:58:46

    共 1 条回复 >

  • 李菜菜
    2016-01-18 15:49:32

    首先他是一个递归问题,什么是递归。递归就是函数调用自身。

    分析这个问题,要知道第一天桃子的个数,就必须要知道第二天桃子的个数,可以使用一个递归函数

    getPeachnumber(n)

    其中当n为10的时候表示的是第十天剩余桃子的个数

    这时候我们想要求得第九天的桃子数   题上说第n天的桃子数是n-1天桃子数的一半再减一

    相当于是(第n+1天的桃子数+1)*2是第n天的桃子数

    所以可构建出递归函数 num =(getPeachNumber(n+1)+1)*2;

    再控制好结束条件,返回值,就OK了

  • 努力提升
    2016-01-14 19:39:13

    #include <stdio.h>
    int getPeachNumber(n)
    {
        int num;    //定义所剩桃子数
        if(n==10)
        {       
           return 1;       //递归结束条件
        }
        else
        {
            num =(getPeachNumber(n+1)+1)*2;   //这里是不应该用递归呢?
            printf("第%d天所剩桃子%d个\n", n,num); //天数,所剩桃子个数
        }
        return num;
    }
    int main()
    {
        int num = getPeachNumber(1);
        printf("猴子第一天摘了:%d个桃子。\n", num);
        return 0;
    }

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926020 学习 · 20793 问题

查看课程

相似问题