递归函数(一)

来源:5-7 递归函数(一)

那谁很靠谱3587144

2016-10-24 15:33

#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回答

  • JustWannaHugU
    2016-10-24 15:44:44
    已采纳

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

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

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


    那谁很靠谱3...

    非常感谢!

    2016-10-24 19:25:39

    共 7 条回复 >

  • 那谁很靠谱3587144
    2016-10-24 16:06:28

    回复 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;

    }


    JustWa...

    你再好好看看递归吧,在纸上写写

    2016-10-24 16:35:02

    共 1 条回复 >

C语言入门

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

926020 学习 · 20793 问题

查看课程

相似问题

递归函数

回答 1

递归函数

回答 1

递归函数

回答 3