为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

}


正在回答

1 回答

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

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


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

我们从头开始

第一天的桃子量是第二天剩下桃子还多一个的两倍 此时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……以此类推 就出结果了

你可以想象成俄罗斯套娃 

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


1 回复 有任何疑惑可以回复我~
#1

qq_Adolph_CGHNR4

厉害厉害 终于在你这get到了我不理解的点
2020-04-24 回复 有任何疑惑可以回复我~
#2

撒野4971754

n=1是天数吗?
2020-11-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信