问答详情
源自:5-8 递归函数(二)

能详细解释一下这个代码吗?还有 num = (getPeachNumber(n+1)+1)*2怎么解读?

#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;
}

提问者:慕娘6268485 2018-08-18 16:28

个回答

  • 要死综合征晚期
    2018-08-20 04:19:00
    已采纳

    题目问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。

    首先,你定义了一个函数来帮你计算在某天还剩多少桃子,这个函数的名字叫 getPeachNumber(n)。这个函数里面有一个参数 n,用n来表示第几天。比如n=10,就表示第十天,n=9,就表示第九天。

    然后,这个问题是让我们求桃子的数量,所以你还需要定义一个参数 num,用来定义所剩桃子数量。

    根据题目要求,第n天桃子的数量干掉一半再减去一个,就是第n+1天的桃子数量。所以 第n+1天桃子数量先加1再乘2,就是第n天的桃子数量。

    已知第10天时候桃子数量为1。所以getPeachNumber(10)=1。

    同理,第9天所剩桃子数量 num = getPeachNumber(9) = (getPeachNumber(10)+1)*2

    第8天所剩桃子数量 num = getPeachNumber(8) = (getPeachNumber(9)+1)*2

    以此类推.........

    int getPeachNumber(n)  //定义函数,n表示第几天
    {
        int num;    //定义所剩桃子数
        if(n==10) //条件判断如果在第10天的时候,
        {
           return 1;       //递归结束条件(就是题目中给的已知条件,第10天时候桃子还剩1个)
        } 
        else //判断条件,在不是第十天的时候
        {
            num = (getPeachNumber(n+1)+1)*2;   //函数中自己调用自己,就是递归。看最后回答你的第二个问题。

            printf("第%d天所剩桃子%d个\n",n ,num);  //打印语句,打印每天所剩桃子数    }
        return num;  //将num的值返回给函数。
    }

    int main() //程序主函数
    {
        int num = getPeachNumber(1); //这里要通过你定义的函数来计算,在第一天时候桃子数量。
        printf("猴子第一天摘了:%d个桃子。\n", num);
        return 0;
    }


     num = (getPeachNumber(n+1)+1)*2;   //函数中自己调用自己,就是递归。这里回答你的第二个问题。

    本题中的运算基本集中在这里。例如,要想求n=9时候的num值,需要根据n=10的num值来计算,getPeachNumber(9) = (getPeachNumber(10)+1)*2;求n=8时候的num值,需要根据n=9的num值来计算,第8天所剩桃子数量 num = getPeachNumber(8) = (getPeachNumber(9)+1)*2。以此类推,相求第n天的num值,需要根据第n+1天的num值来计算。每计算一次,都需要调用一次这个函数。

    num  = getPeachNumber(n)=(getPeachNumber(n+1)+1)*2

    不论num,还是getPeachNumber(n),都看做是一个字就可以,他的原理很简单, 

    a =(b+1)*2;   b=(c+1)*2;    c=(d+1)*2; d=1。让你求a。