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

num = (getPeachNumber(n+1)+1)*2; 是什么意思?

#include <stdio.h>

int getPeachNumber(int n)

{

    int num;    //定义所剩桃子数

    if(n==10)

    {

        return 1;       //递归结束条件

    } 

    else

    {

        

        printf("第%d天所剩桃子%d个\n",? ,? ); //天数,所剩桃子个数

    }num = (getPeachNumber(n+1)+1)*2;   //    ???????????????????

    return num;

}

int main()

{

    int num = getPeachNumber(1);

    printf("猴子第一天摘了:%d个桃子。\n", num);

    return 0;

}


正在回答

2 回答

num = (getPeachNumber(n+1)+1)*2 的意思理解


最里面的小括号的“(n+1)”为递归加,即每次递归n的值+1,就是天数,为了获取第10天已知的剩余桃子数量“1”;

先算算每天没有吃桃子前剩余的桃子数量

第10天,剩余1个桃子;

第9天,剩余(1+1)*2=4个桃子;

第8天,剩余(4+1)*2=10个桃子;

第7天,剩余(10+1)*2=22个桃子;

第6天,剩余(22+1)*2=46个桃子;

....

根据条件,第10天只剩余1个桃子可以计算出第9天的桃子,

所以num = (getPeachNumber(n+1)+1)*2,使用的是“(n+1)”,是为了获取递归结束条件返回的值“return 1;”就是数值1,

所以第9天的桃子数可以计算出来sum= (getPeachNumber(9+1)+1)*2=(1+1)*2=4;

所以第8天的桃子数要根据第9天计算的数值来计算,可以计算出来sum= (getPeachNumber(8+1)+1)*2=(4+1)*2=10;

所以第7天的桃子数要根据第8天计算的数值来计算,可以计算出来sum= (getPeachNumber(7+1)+1)*2=(10+1)*2=22;

.......


所以该递归的计算过程全部过程应该是:

n=10时, num=1;

n=9时, num=(1+1)*2;

n=8时, num=((1+1)*2+1)*2;

n=7时, num=(((1+1)*2+1)*2+1)*2;

...

n=1时, num=(((((((((1+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2;

2 回复 有任何疑惑可以回复我~

前一天的桃子树是之后一天的两倍+1

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

帆帆_imMP26

是加一两倍
2024-11-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

num = (getPeachNumber(n+1)+1)*2; 是什么意思?

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