快捷导航

刚学了c语言入门5-7的课程,有一个问题请教?

#include /* 定义获取单词数量的函数 */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

首先说,有返回类型的函数,在每一个返回分支处都应该返回适当的值。 如果你删掉了getWordNumber函数中else分支里的return语句,那么函数在运行到else分支退出时会返回什么? 答案是返回值是不确定的,返回什么都有可能。所以最后的结果肯定不同。 因为返回值都可能是不确定的,究其结果也没有意义。


其次,这代码是“递归”,递归是有相应的逻辑的,你删掉代码也就实现不了递归的逻辑了。 如果你还没理解什么是递归的话,我在老问答区有一个回答:http://www.imooc.com/qadetail/90499 虽然不是讲解这道题的,但解释了递归的逻辑。
针对这代码,你应该在else分支处返回getWordNumber(n-1)+n 的值。
回复

使用道具 举报

自己设断点调试
回复

使用道具 举报

可能感兴趣的问答

发新帖
TA的信息
  • 会员所属: 注册会员
  • 认证信息: 邮箱认证手机认证
  • 微信访问
  • 手机APP