问答详情
源自:5-7 递归函数(一)

递归函数(一)

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


提问者:那谁很靠谱3587144 2016-10-24 15:33

个回答

  • 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,栈顶地址域作为返回地址出栈,继续这样下去,直到栈空


  • 那谁很靠谱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;

    }