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

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

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

C
Dancing_code 2016-10-17 00:11:38
#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 的值。

查看完整回答
反对 回复 2016-10-17
?
编程之夜

TA贡献29条经验 获得超70个赞

自己设断点调试
查看完整回答
1 反对 回复 2016-10-17
  • 2 回答
  • 1 关注
  • 1255 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信