很多同学都卡在了getWordNumber(n-1)+n这一块,表示理解不能,说下自己的浅见。

原例子中的getWordNumber(n-1)+n这种写法比较有误导性,我盯着这段代码看了半小时也没反应过来,但是如果把代码写成这样:

return n+getWordNumber(n-1) ;

是否清晰了很多?

参数n现在要相加的是参数为(n-1)的整个getWordNumber()函数,那么这个时候就要计算getWordNumber(n-1)的值,需要走一遍函数中的if else语句才能求得。举个例子:

当n==3的时候,要计算 getWordNumber(3),此时函数内n+getWordNumber(n-1)就变成了3+getWordNumber(3-1)。

注意,这时getWordNumber括号里的参数n变成了实参2,但是我们现在并不知道函数getWordNumber(2)的值,需要再次把实参2代入函数中的if else语句里进行运算,此时n+getWordNumber(n-1)就变成了2+getWordNumber(2-1),此时参数n又变成了1,我们依旧不知道getWordNumber(1)的值,依旧把实参1代入函数,发现

if(n == 1)

{

return 1;

}

此时函数getWordNumber(1)就求得了值=1,有了getWordNumber(1)的值就能求得getWordNumber(2)=3,接下来便能求得getWordNumber(3)=6,所以getWordNumber(3-1)+3的值等于6。

打个比方,就像用英英词典查一个单词,发现英文解释中有个单词还是不认识,于是接着用这本词典查这个不认识的词,然后发现解释里还是有一个不认识的单词,于是接着查第3次,第4次...查到最后一次终于没有不认识的单词了,一路回溯,才能知道查的第1个单词是什么意思。

这个比方中的词典就是递归函数,单词就是函数中的参数。

编程新手,如有误,轻拍。

更多推荐

c语言教程word,C语言入门