问答详情
源自: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;

}

每一次调用n的值分别变成了多少啊,求举几个列子

比如 n=10 的时候

(10-1)+10=19

那么第二次循环n的值分别为多少啊,我只能看懂第一个

提问者:慕仰103958 2018-11-19 22:38

个回答

  • 最喜欢你啦
    2018-11-21 22:01:37

    第二个的n值就是当前函数里面刚开始时候括号里面的值,

  • 最喜欢你啦
    2018-11-21 20:48:08

    我理解的就是,,,一直循环使用自身,但是值不一样,第一次的n是10 第二次的n就相当于上个的n-1,也就是9,第三次的n就是9-1,也就是8,第四次的n就是8-1,也就是7~~~~~~~一直到最后一次的时候的n的值是1,就直接返回1,然后在开始往回走,慢慢的每个n值相加,最后就是相加的值,emmmmmm我不会堆栈什么的,我自己理解的,就是嗯,一层一层套,慢慢的就套出了答案。

  • Andd_Dev
    2018-11-20 16:15:47

    首先你要理解什么是递归。

    递归属于逆向思维,我们平常的思维方式属于递推,也就是从1到100。

    如何知道到第N天小明学会了多少个单词?很简单啊,昨天学会的加上今天的天数就是了嘛。

    那昨天学会了多少?很简单啊,前天学会多少加上昨天的天数不就知道了吗?

    那前天学会了多少怎么知道呢?同上。

    我们只需关心本次的结果即可。