2 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個贊
這就是“遞歸”。
最后的結(jié)果其實(shí)就是從1加到10,所以結(jié)果是55。
getWordNumber函數(shù)中的printf("%d\n",n)打印的就是每次調(diào)用傳入的參數(shù),確實(shí)會依次輸出10,9,8,7,6,5,4,3,2,1,這也沒錯啊。
55當(dāng)然不是存在n里面,最終從getWordNumber(10)返回的值是55,被保存到num中。
也許你沒理解遞歸的執(zhí)行流程:
遞歸函數(shù)中首先規(guī)定一個遞歸截止條件,這個代碼中就是if(n == 1) ,隨后再次調(diào)用自己(當(dāng)然是傳入不同的參數(shù))。
重點(diǎn)是:這里再次調(diào)用自己時,程序執(zhí)行流程進(jìn)入到另一個getWordNumber函數(shù)中,但前次調(diào)用的getWordNumber函數(shù)是沒有結(jié)束的,只是暫停在return getWordNumber( n - 1 ) +n;語句那里,等待getWordNumber( n - 1 )返回。
這樣不斷調(diào)用自己,直到某次調(diào)用時傳入的參數(shù) n 就是 1 ——遇到了遞歸截止條件,于是函數(shù)返回 1 到上一次調(diào)用中,這個“上一次調(diào)用”的函數(shù)原本是暫停在?return getWordNumber( n - 1 ) +n; 這里,這樣?getWordNumber( n - 1 ) 就是函數(shù)返回值(也就是1),所以就返回了?1 + n,同樣是返回到上級調(diào)用中...... 這樣這一串調(diào)用一直返回到最初的getWordNumber函數(shù)中,最終返回的結(jié)果就等于是之前所有結(jié)果的和。
我在老問答區(qū)有一個回答,里面舉了一個具體的例子,雖然不是關(guān)于這個代碼的,但含義是完全一樣的,你可以參考:http://idcbgp.cn/qadetail/90499
如果還是不懂,就再寫出來具體哪里不明白。

TA貢獻(xiàn)11條經(jīng)驗(yàn) 獲得超6個贊
return ((getWordNumber( n - 1 ) )+n); ------>>return {[getWordNumber( n - 1 ) ]+n}; 前面加了兩對小括號,后面加了一對中括號和一對大括號,后面加的“不合法的括號種類”是為了容易理解。不知道這樣對你有沒有什么提示性的幫助。
- 2 回答
- 1 關(guān)注
- 1507 瀏覽
添加回答
舉報