卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

計(jì)算機(jī)語言 遞歸調(diào)用有什么好處一般什么情況下要遞歸?

遞歸調(diào)用有什么好處一般什么情況下要遞歸?遞歸的基本思想是“調(diào)用你自己”。使用遞歸的方法是直接或間接地調(diào)用自己。其實(shí)遞歸方法體現(xiàn)了“類比”和“同步重復(fù)”的思想。它可以用簡單的程序解決一些復(fù)雜的計(jì)算問題,

遞歸調(diào)用有什么好處一般什么情況下要遞歸?

遞歸的基本思想是“調(diào)用你自己”。使用遞歸的方法是直接或間接地調(diào)用自己。

其實(shí)遞歸方法體現(xiàn)了“類比”和“同步重復(fù)”的思想。它可以用簡單的程序解決一些復(fù)雜的計(jì)算問題,但計(jì)算量很大。還有一些數(shù)據(jù)結(jié)構(gòu),如二叉樹,具有固有的遞歸特性;另外還有一種問題,雖然沒有明顯的遞歸結(jié)構(gòu),但由于其普遍性,用遞歸程序編寫程序比其它方法更容易,如八皇后問題、河內(nèi)塔問題等對于遞歸程序,我們應(yīng)該學(xué)會(huì)用遞歸來解決問題。無論是直接遞歸還是間接遞歸,都需要在當(dāng)前層調(diào)用下一層時(shí)實(shí)現(xiàn)參數(shù)傳遞,獲取下一層返回的結(jié)果,并通過調(diào)用上一層返回當(dāng)前層的結(jié)果。對于各層調(diào)用的現(xiàn)場存儲(chǔ)和恢復(fù),由程序自動(dòng)實(shí)現(xiàn),無需人工干預(yù)。因此,在遞歸程序的設(shè)計(jì)中,關(guān)鍵是找出調(diào)用所需的參數(shù)、返回的結(jié)果以及遞歸調(diào)用結(jié)束的條件。例如,在階乘函數(shù)fact(n)中,每層需要傳遞一個(gè)自然數(shù)n并返回n*fact(n-1)。遞歸調(diào)用結(jié)束的條件是n=0。據(jù)此,編寫相應(yīng)的程序很方便

如果遞歸級別太多,就會(huì)導(dǎo)致堆棧溢出異常,因?yàn)槊看握{(diào)用都會(huì)生成一個(gè)新的堆棧幀,并使用這個(gè)堆棧幀來保留當(dāng)前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會(huì)導(dǎo)致堆棧溢出。

以n的階乘為例:

正常遞歸:

如果n=3,則每一步都需要保留n值和下一個(gè)函數(shù)的返回值,因此每次調(diào)用都需要?jiǎng)?chuàng)建一個(gè)新的堆棧幀

尾部遞歸:

如果n=3,則每次調(diào)用都可以重用堆棧幀,因?yàn)椴恍枰4鏍顟B(tài)值。

因此,當(dāng)遞歸在當(dāng)前堆棧幀執(zhí)行后完成時(shí),它不需要保留當(dāng)前堆棧幀,但根據(jù)當(dāng)前堆棧幀的結(jié)果,它可以在進(jìn)入下一個(gè)堆棧幀時(shí)優(yōu)化為尾部遞歸。通常,尾部遞歸需要滿足遞歸調(diào)用是函數(shù)體中最后執(zhí)行的語句。例如,在factorial示例中,要執(zhí)行的最后一條語句是直接調(diào)用factorial(n-1,n*result),而不是表達(dá)式n*factorial(n-1)。如果是表達(dá)式,則需要堆棧幀來保留N和階乘(N-1)的結(jié)果。