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

#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。

我就是想知道是怎么计算出来的这一列数??百思不得其解,万望大神指点!!

Dancing_code
浏览 1256回答 2
2回答

onemoo

首先说,有返回类型的函数,在每一个返回分支处都应该返回适当的值。 如果你删掉了getWordNumber函数中else分支里的return语句,那么函数在运行到else分支退出时会返回什么?  答案是返回值是不确定的,返回什么都有可能。所以最后的结果肯定不同。 因为返回值都可能是不确定的,究其结果也没有意义。其次,这代码是“递归”,递归是有相应的逻辑的,你删掉代码也就实现不了递归的逻辑了。 如果你还没理解什么是递归的话,我在老问答区有一个回答:http://www.imooc.com/qadetail/90499   虽然不是讲解这道题的,但解释了递归的逻辑。针对这代码,你应该在else分支处返回 getWordNumber(n-1)+n 的值。

编程之夜

自己设断点调试
打开App,查看更多内容
随时随地看视频慕课网APP