#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应该怎么理解?
首先,getWordNumber(n-1)不是调用了什么,这是返回给这个函数的一个数值,而(n-1)+n是运算。也就是说,10,在经过(10-1)+10这样的运算后,把19这个数值返回给getWordNumber,即,在main里面,num=getWordNumber=19。其次,为了理解这个程序是什么意思,我们可以代几个数进去试一试,发现,这其实就是第一天1个,第二天3个,第三天5个,第四天7个等等这样一个奇数列,所以-1就是一个运算方式,只是为了得到这样一个规律,不用纠结那么长时间。我也是初学者,我很懂那种大神说的很随意的时候我们很迷茫那种感觉,所以我就要尽量的解释清楚,谢谢。
主函数调用的是getWordNumber(10),参数是10,说明是第十天。而解决这道题的方法是从第一天开始往后累加,所以要逐次往前一天迭代直到第一天。这就是-1的理解。