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

大佬们,我想知道这个代码的运算过程

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

}


提问者:天神墨迹 2020-01-25 19:37

个回答

  • Reedx06
    2020-02-19 22:04:14

    其实就是一道应用题,每天的桃子是后一天剩下桃子量的两倍还多一个,所以要想直到当天桃子量必须先知道后一天的桃子量 这也是为什么这个代码是倒着算的 

    并且已知到第十天的时候只剩一个桃子 所以只有算到第十天的时候才能开始解


    在算到最后一步,也就是第十天的时候,之前每一天的桃子量都不知道,而是把计算下一天桃子量的函数当作前一个函数的变量

    我们从头开始

    第一天的桃子量是第二天剩下桃子还多一个的两倍 此时n=1

    即第一天的桃子量num={[第二天的桃子量getPeachnumber(n+1=2)]+1(多一个)}*2 的两倍

    然后对于第二天 来说 此时 n=2 num={[第三天的桃子量getPeachnumber(n+1=3)]+1(多一个)}*2 的两倍

    在第十层之前每层都是这样循环的 但是在算到第十层之前都没有确切的数字出来

    也就是算第九天的桃子量时 n=9 num={[第十天的桃子量getPeachnumber(n+1=10)]+1(多一个)}*2 的两倍

    由n==10, return 1可知 对于函数getPeachnumber(n)当自变量等于10时 函数值等于1,即第十条桃子量为1

    然后第九天就是num={[1]+1}*2=4

    第八条是num={[4]+1}*2=10……以此类推 就出结果了

    你可以想象成俄罗斯套娃 

    不知道有没有帮到你更好的理解