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

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

Clzypx

2023-08-08 16:38

#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回答

  • 奥德彪拉香蕉
    2024-08-23 10:22:10

    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;

  • 慕侠3562667
    2023-08-22 03:34:50

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

C语言入门

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

926020 学习 · 20793 问题

查看课程

相似问题