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

疑惑 some questions

为什么这个自定义 的函数不用调用就执行了以及为什么先从n=9开始

#include <stdio.h>

int getPeachNumber(int 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;

}


正在回答

2 回答

为什么这个自定义 的函数不用调用就执行了以及为什么先从n=9开始

#include <stdio.h>

int getPeachNumber(int n)

{

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

    if(n==10)

    {

        return 1;      //递归结束条件

    } 

    else

    {

        num = (getPeachNumber(n+1)+1)*2;  

 //这里N=1代入,

num=(getPeachNumber(1+1)+1)*2

再调用getPeachNumber(2)

以此一直调用到(getPeachNumber(9+1)+1)*2

这时候getPeachNumber(10)=1

所以num=(1+1)*2=4

重点:这时候代码读下一行printf("第%d天所剩桃子%d个\n", n, num);

输出  第9天所剩桃子4个

这时候跳回我们上一个调用num=(getPeachNumber(8+1)+1)*2

则num=(4+1)*2=10,再输出。

以此类推

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

    }

    return num;

}

int main()

{

    int num = getPeachNumber(1);//调用在这里

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

    return 0;

}


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

慕设计0398473 提问者

输出第九天后,为什么会跳回到上一个调用
2018-09-14 回复 有任何疑惑可以回复我~
#2

qq_Suke_dgiRW0 回复 慕设计0398473 提问者

因为你每调用一次getPeachNumber()的时候都会printf("第%d天所剩桃子%d个\n", n, num); 其实你是在计算num的过程中每次调用都进行了输出。
2018-09-14 回复 有任何疑惑可以回复我~
#3

慕设计0398473 提问者 回复 qq_Suke_dgiRW0

那n=1输入时,输出顺序不是应该是第一天、第二天。。。再到第九天吗
2018-09-15 回复 有任何疑惑可以回复我~
#4

qq_Suke_dgiRW0 回复 慕设计0398473 提问者

N=1虽然是先输入 但接着我们要执行的是自调用函数 这时N=2以此类推一直调用到N=10,跳到这时候getPeachNumber(10)=1,这时候不再调用,我们计算第九层的NUM,执行第九层的Printf。 也就是你输入N=1但实际输出的是从第九层的Print开始的。
2018-09-16 回复 有任何疑惑可以回复我~
#5

慕设计0398473 提问者 回复 qq_Suke_dgiRW0

哦 懂了 感谢
2018-09-16 回复 有任何疑惑可以回复我~
#6

墙外行人2203222 回复 慕设计0398473 提问者

懂了吗,我也有同样的疑惑
2018-09-21 回复 有任何疑惑可以回复我~
#7

qq_Suke_dgiRW0 回复 墙外行人2203222

你哪里不懂,可以问我。
2018-10-04 回复 有任何疑惑可以回复我~
查看4条回复

输出第九天后,为什么会跳回到上一个调用

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

举报

0/150
提交
取消
C语言入门
  • 参与学习       926249    人
  • 解答问题       20798    个

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

进入课程

疑惑 some questions

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