问答详情
源自:5-7 递归函数(一)

这次的课后习题即使看了答案依然不能理解

#include <stdio.h>
/* 定义获取单词数量的函数 */
int getWordNumber(int n)
{   
    if(n == 1)
    {
        return 1;    //第一天只会1个单词
    }
    else{
        return  getWordNumber(n-1)+n ;       //到第天会的单词数量
    }
}
int main()
{
    int num = getWordNumber(10);     //获取会了的单词数量
    printf("小明第10天记了:%d个单词。\n", num);
    return 0;
}

其中这一行

return  getWordNumber(n-1)+n ;

到底应该怎么理解?这个getWordNumber(n-1)究竟调用了什么?函数是getWordNumber(n)可是多出来一个-1应该怎么理解?

提问者:qq_淡末初夏_03336219 2016-07-13 15:04

个回答

  • 番茄的卍番茄酱
    2016-07-13 17:19:25
    已采纳

    首先,getWordNumber(n-1)不是调用了什么,这是返回给这个函数的一个数值,而(n-1)+n是运算。也就是说,10,在经过(10-1)+10这样的运算后,把19这个数值返回给getWordNumber,即,在main里面,num=getWordNumber=19。其次,为了理解这个程序是什么意思,我们可以代几个数进去试一试,发现,这其实就是第一天1个,第二天3个,第三天5个,第四天7个等等这样一个奇数列,所以-1就是一个运算方式,只是为了得到这样一个规律,不用纠结那么长时间。我也是初学者,我很懂那种大神说的很随意的时候我们很迷茫那种感觉,所以我就要尽量的解释清楚,谢谢。

  • whqaz
    2016-07-13 19:30:22

    主函数调用的是getWordNumber(10),参数是10,说明是第十天。而解决这道题的方法是从第一天开始往后累加,所以要逐次往前一天迭代直到第一天。这就是-1的理解。