慕九州5315283
2019-09-29 21:43
#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-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。
如果你n不减1,那么这递归是无限进行的,因为实参永远到不了1
如果你n不减1,那么这递归是无限进行的,因为实参永远到不了1
()里边的是函数而不是一个算法,因此有区别
你这个运行的时候是不是无限循环了呀, return getWordNumber(n) ; 没有递减的地方一直循环一个数,如果输出的话也只有一个值,输入和输出完全一样。
C语言入门
926025 学习 · 20793 问题
相似问题