#include <stdio.h>/* 定义获取单词数量的函数 */int a;int getWordNumber(int n){ if(n == 1) { return 1; } else { a=getWordNumber(n-1)+n ; printf("%d\n",a); }}int main(){ int num = getWordNumber(10); //获取会了的单词数量 printf("第10天记了:%d个单词。\n", num); return 0;}其实我就是在else里面最后一行删掉了一个return a;,但这个程序前面运行出来的结果就和原来结果完全不同。。而是3,5,6,7,8,9,10,12,13。我就是想知道是怎么计算出来的这一列数??百思不得其解,万望大神指点!!
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
首先说,有返回类型的函数,在每一个返回分支处都应该返回适当的值。 如果你删掉了getWordNumber函数中else分支里的return语句,那么函数在运行到else分支退出时会返回什么? 答案是返回值是不确定的,返回什么都有可能。所以最后的结果肯定不同。 因为返回值都可能是不确定的,究其结果也没有意义。
其次,这代码是“递归”,递归是有相应的逻辑的,你删掉代码也就实现不了递归的逻辑了。 如果你还没理解什么是递归的话,我在老问答区有一个回答:http://www.imooc.com/qadetail/90499 虽然不是讲解这道题的,但解释了递归的逻辑。
针对这代码,你应该在else分支处返回 getWordNumber(n-1)+n 的值。
- 2 回答
- 1 关注
- 1255 浏览
添加回答
举报
0/150
提交
取消