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

我感觉这么两个问题 大家一起帮忙看看

  1. 按照答案的编程   最后输出的结果

    应该是这样的吧:

    第一天所剩桃子:

    第二天所剩桃子:

    ........

        第十天所剩桃子:

2.第一天摘的桃子应该是(1534+1)*2吧


提问者:weixin_慕妹9153730 2020-02-06 11:48

个回答

  • Warm_Sweet
    2020-03-07 23:06:16

    问题1:如下递归函数执行过程图,答案所给代码num = (getPeachNumber(n + 1) + 1) * 2;是n+1的形式,故该函数从主函数所给实参(这里是1)开始执行n+1的运算。递归函数按照123456789的顺序引用自身,然后逆序(987654321)执行运算过程,因此打印的顺序为逆序。如要正序打印,以下为参考代码:

    #include <stdio.h>

    int getPeachNumber(int n)

    {

    int num;

    if (n == 0)    //这里是结束条件,不打印该值,而是打印后面一个值(此处为1)

    num = 3070;    //这里需要提前计算出结果。当然也有代码不需要自己提前计算出结果,奈何我学识浅薄,只能想到这么个办法

    else

    {

    num = (getPeachNumber(n - 1) - 1) / 2;    //这里进行实参的n-1运算,即按照987654321顺序的运算

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

    }

    return num;

    }

    int main()

    {

    getPeachNumber(10);    //如果到第九天停止,则此处实参需改为9

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

    printf("猴子第一天剩了:%d个桃子。\n", getPeachNumber(1));    //这里调用了1,会多输出一个第一天

    return 0;

    }

    http://img1.mukewang.com/5e63b6760001d23705970304.jpg

    问题2:看了上面的内容,想必你已经知道了吧?

  • weixin_慕仔0029264
    2020-02-28 11:22:46

    程序应该改成 printf("猴子第一天摘了:%d个桃子。\n", (num+1)*2);才对

  • 小白萌新up
    2020-02-24 16:10:15

    同求,第一天剩下的桃子应该是1534,那第一天摘的桃子就是(1534+1)*2啊   

    求明白人讲解

  • 李梓煊12138
    2020-02-07 19:15:35

    先进后出 进123456789出987654321 我不确定仅供参考