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

为什么这样不对啊 getWordNumber(int n) 和 getWordNumber(int n-1) +n一样的吧

#include <stdio.h>

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

int getWordNumber(int n)

{   

    if(n == 1)

    {

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

    }

    else{

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

    }

}

int main()

{

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

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

    return 0;

}


提问者:慕九州5315283 2019-09-29 21:43

个回答

  • 慕移动7097258
    2019-10-01 01:12:58
    已采纳

    看样子你还没有理解递归函数啊,看一下5-8的那张图片吧,会帮助你理解递归函数的,如果你那样写的话每次 getWordNumber()函数读到的n值不变 ,就会一直执行else里面的语句 。

    之所以要return getWordNumber(n-1)而不是getWordNumber(n),就是要让每次的读取值减小1,直到读取到的值等于 1,然后return 1,就不再调用自己。(函数中的return就是给函数一个值,因为return后面还要调用函数 ,所以函数会一直计算下去,直到不再调用函数)比如return 1就是很直接的返回值,不用计算直接返回,而return getWordNumber(n)就要计算了才能返回值

    而getWordNumber(n-1)后面还加个n就是为了   每一次调用自己都会加上一个对应的数,直到n=1直接return 1不再调用自己。

    其实可以这样理解吧,第一次返回的是    getWordNumber(n-1)+n   因为   getWordNumber(n-1)   的值未知所以还得再计算getWordNumber(n-1),然后   getWordNumber(n-1)   的值又等于   getWordNumber(n-2)+n-1   getWordNumber(n-1)  后读取的值变小1,所以n对应位置的数都减小了1,然后又是getWordNumber(n-2)再计算得到    ( getWordNumber(n-2)+n-1 ) +n  ....最后n=1的时候返回1并停止得到((......)+n-3)+n-2)+n-1)+n。

  • 紫黎沃乎嘿
    2019-10-01 23:49:00

    如果你n不减1,那么这递归是无限进行的,因为实参永远到不了1

  • 紫黎沃乎嘿
    2019-10-01 23:48:56

    如果你n不减1,那么这递归是无限进行的,因为实参永远到不了1

  • 慕虎6101201
    2019-10-01 20:20:48

    ()里边的是函数而不是一个算法,因此有区别 

  • 慕虎6101201
    2019-10-01 20:12:20

    你这个运行的时候是不是无限循环了呀, return getWordNumber(n) ;  没有递减的地方一直循环一个数,如果输出的话也只有一个值,输入和输出完全一样。