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

头炸了!求解!

#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;

}

为什么会有这份倒序打印,实参赋值n=1时,调用函数之后,不是应该只能得到一个值吗,也就是第一天所剩桃子数,在这之间n有变化吗?23456789是哪来的?

正在回答

2 回答

当运行到 num =(getPeachNumber(n+1)+1)*2 ;时,因为n=23456789都不为10,没有确定的返回值,一直调用递归函数,直到n=10,发现返回为1,在getPeachNumber(9)中也有else语句,在这个里面printf输出“第9天所剩桃子4个“,然后n=9也有了确定的返回值,接下来是8,同理到7654321。到1了之后这个int num = getPeachNumber(1);就运算完了,然后运算 printf("猴子第一天摘了:%d个桃子。\n", num);

这也是我刚理解的,说的不太清楚的地方多多包容啦~嘻嘻嘻,希望你能明白呀*v*

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

三十二应遍尘刹 提问者

非常感谢!
2017-02-06 回复 有任何疑惑可以回复我~

if else函数里面  n不为10时  运行else   else里面有   num = (getPeachNumber(n+1)+1)*2;  这里有getPeachNumber函数,  所以会再运行一次if else   并且n每次会加一;  加到10的时候运行if里面的内容 返回1;

即将1返回到倒数第二次  也就是n=9的那次中; 运行得到一个num  返回到8中 ,再运算  返回、 ………… 

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

举报

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

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

进入课程

头炸了!求解!

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