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

为什么这样不对啊 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;

}


正在回答

5 回答

看样子你还没有理解递归函数啊,看一下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。

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

慕九州5315283 提问者

谢谢大佬
2019-10-02 回复 有任何疑惑可以回复我~
#2

慕移动7097258 回复 慕九州5315283 提问者

小白一个不敢当,学习的时候多理解就行,不要一味做题
2019-10-06 回复 有任何疑惑可以回复我~

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

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

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

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

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

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

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

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

举报

0/150
提交
取消

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

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