qq_天蝎的尾巴卍_0
2017-01-11 10:42:27
?function abc($num) {? if($num==1) { return 1; } else { ? return $num*abc($num-1); }? }? echo abc(5); ?//結(jié)果為 120;?遞歸的代碼流程具體是怎么走的?
3 回答
已采納

KevenHuang
TA貢獻(xiàn)280條經(jīng)驗(yàn) 獲得超233個(gè)贊
首先說(shuō)一下函數(shù)的運(yùn)行,函數(shù)的運(yùn)行是在內(nèi)存中新開(kāi)一個(gè)棧,然后在棧內(nèi)運(yùn)行的,而遞歸就是指在函數(shù)內(nèi)部調(diào)用自己,當(dāng)一個(gè)函數(shù)在函數(shù)內(nèi)部調(diào)用自己,它會(huì)立即開(kāi)辟一個(gè)棧,然后運(yùn)行函數(shù),當(dāng)然它要有一個(gè)遞歸點(diǎn)和遞歸出口,否則函數(shù)會(huì)無(wú)論調(diào)用造成死循環(huán),遞歸點(diǎn)為在什么時(shí)候需要調(diào)用自己,遞歸出口為在什么時(shí)候不再調(diào)用自己,用一個(gè)例子來(lái)解釋一下遞歸,就是你的朋友張三向你借錢(qián),你又剛好不夠,你又向你的朋友李四借錢(qián),你的朋友李四錢(qián)又不夠,李四又向他的朋友王五借錢(qián),王五的錢(qián)夠了,把錢(qián)交給李四,李四把錢(qián)交給你,你再把錢(qián)交給張三,這個(gè)過(guò)程是連續(xù)的,只有最后一個(gè)把錢(qián)湊夠了才能往回走。遞歸大概就是這樣,遞歸是以空間換時(shí)間的,所以遞歸是非常耗內(nèi)存的。
點(diǎn)擊展開(kāi)后面5條

蜂之谷
TA貢獻(xiàn)564條經(jīng)驗(yàn) 獲得超863個(gè)贊
5*abc(4)
5*4*abc(3)
5*4*3*abc(2)
5*4*3*2*abc(1)
5*4*3*2*1 = 120

- 3 回答
- 1 關(guān)注
- 1789 瀏覽
添加回答
舉報(bào)
0/150
提交
取消