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

递归函数(一)

#include <stdio.h>

/* 定义获取单词数量的函数 */

int getWordNumber(int n)

{   

    if(n == 1)

    {

        return 1;    //第一天只会1个单词

    }

    else

    {

        return getWordNumber(n-1)+n ;       //到第天会的单词数量

    }

}

int main()

{

    int num = getWordNumber(10);     //获取会了的单词数量

    printf("小明第10天记了:%d个单词。\n", num);

    return 0;

}

递归函数,是碰到什么条件停止循环的?到最后为什么不是getWordNumber(1-1)+1?


正在回答

2 回答

因为getWorldNumber的值已经确定了是1,所以就不会再继续执行getWorldNumber(n-1)+n了。

在主方法main中调用了getWordNumber方法,当函数走到int num = getWordNumber(10)时又会返回去调用getwordNumber方法;反复执行直到满足递归函数终结条件停止;

递归函数的执行过程:执行时遇到getWordNumber(10),保存当前的n(n-1)+n以及getWordNumber(10)执行完后的返回地址;然后继续执行,继续对局部变量和函数返回地址入栈保存。直到遇到递归结束条件,开始弹栈,这是将栈顶n域值恢复给n,栈顶地址域作为返回地址出栈,继续这样下去,直到栈空


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

那谁很靠谱3587144 提问者

多谢,我先去查查什么是栈,回来要是能看明白,一定会采纳的
2016-10-24 回复 有任何疑惑可以回复我~
#2

JustWannaHugU 回复 那谁很靠谱3587144 提问者

好的。 栈就是一个后进先出的容器而已
2016-10-24 回复 有任何疑惑可以回复我~
#3

那谁很靠谱3587144 提问者 回复 JustWannaHugU

if(n == 1) { return 1; //第一天只会1个单词 } 当n==1的时候,return 1(输出1),可是为什么最后输出的是return getWordNumber(n-1)+n这个呢?
2016-10-24 回复 有任何疑惑可以回复我~
#4

JustWannaHugU 回复 那谁很靠谱3587144 提问者

?你说明白点
2016-10-24 回复 有任何疑惑可以回复我~
#5

JustWannaHugU 回复 那谁很靠谱3587144 提问者

第一次调用时n=10,就会return getWordNumber(n-1)+n,也就是getWordNumber(10-1)+10; 而getWordNumber(10-1)返回的是getWordNumber(9-1)+9; ...一直往下减 getWordNumber(2)返回getWordNumber(2-1)+2; 但是到了这时候就会出现 getWordNumber(1)返回1; 于是开始逐层往上return值了(因为从一开始就没有计算完毕) getWordNumber(10)=getWordNumber(1)+2+3+4+5+6+7+8+9+10=55.至此程序执行完毕
2016-10-24 回复 有任何疑惑可以回复我~
#6

那谁很靠谱3587144 提问者 回复 JustWannaHugU

这个真是挺难理解,感觉比原来的课加一块都难理解,我去度娘视频看看是不是好理解一些,谢谢大神先
2016-10-24 回复 有任何疑惑可以回复我~
#7

那谁很靠谱3587144 提问者

非常感谢!
2016-10-24 回复 有任何疑惑可以回复我~
查看4条回复

回复 JustWannaHugU:#include <stdio.h>

/* 定义获取单词数量的函数 */

int getWordNumber(int n)

{   

    if(n == 1)//那么,最后为什么不是直接输出这个呢?如果这个不成立,不是才执行下面的else吗?

    {

        return 1;    

    }

    else

    {

        return getWordNumber(n-1)+n ; //这里一直最后会成(1-1)+1对吗????      

    }

}

int main()

{

    int num = getWordNumber(10);     //获取会了的单词数量

    printf("小明第10天记了:%d个单词。\n", num);

    return 0;

}


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

JustWannaHugU

你再好好看看递归吧,在纸上写写
2016-10-24 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

递归函数(一)

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