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

桃子第几天的数量是怎么打印的数量是怎么回事

n=1的结果不应该是(getpeachnumber (2)+1)*2+(getpeachnumber(3)+1)*2)+……+(getpeachnumber(9)+1)*2+(getpeachnumber(10)+1)*2吗?
最后一项也等于4
请问getpeachnumber(1~9)的值是怎么算的?
还有 函数为什么自动从第九天开始打印了?为什么不是第100天?第1000天?

提问者:宥沐熙 2021-10-24 17:18

个回答

  • 精慕门1559820
    2022-08-30 18:56:06

    我琢磨了两天,最后受不了了问了问嵌入式同事,他是这样给我解释的,那个getPeachNumber函数在第一次进圈开始套的时候,在getPeachNumber这个函数内程序跑到num=getPeachNumber这又跑一圈,一直跑到if那返回个num=1,才会继续乘2+2

  • 慕娘3551181
    2021-10-31 14:22:18

    getPeachNumber(n)给出的结果sum是第n天在吃之前的桃子数量,也就是第(n-1)天吃完之后剩下的桃子数量。

    getPeachNumber(n)自定义函数在main()函数中的第一个参数值是  1   ,自定义函数getPeachNumber(n)中的终止条件是  n==10。故不可能出现第100天,第1000天的情况。


    getPeachNumber(n)自定义函数的if语句中,有一段

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

    这是在自定义函数返回num结果之前就已经打印出来了的。


    整个程序中,(n=1到10) 和( 当n=10时,num=1)这两项数据是已知的,然后就是第n天和第n+1天,num的变化规律是知道的。  要想知道第1天有多少桃子,只能从第10天有1个桃子,推算出第9天,有(1+1)*2=4个桃子,然后是第8天,有(4+1)*2=10个桃子……   同样的,在递归函数中,最先计算出答案的也是第9天的桃子数量,同时可以将第9天的桃子数量打印出来,然后是第8天,第7天……

  • 慕瓜2111996
    2021-10-31 12:11:44

    #include<stdio.h>
    #include <windows.h>
    void color(int x) //设置字体颜色
    {
    if (x >= 0 && x <= 15)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
    else
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    }
    int getPeachNumber(int n)
    {
    int num=1; //定义所剩桃子数
    if (n == 10)
    {
    return num; //递归结束条件
    }
    else
    {
    num = ((getPeachNumber(n+1))+1)*2;
    printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
    }
    return num;
    }
    int main()
    {
    color(2);
    int num = getPeachNumber(1);
    printf("猴子第一天摘了:%d个桃子。\n", num);
    return 0;
    }