国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

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

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

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

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

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

如果遞歸級別太多,就會導致堆棧溢出異常,因為每次調(diào)用都會生成一個新的堆棧幀,并使用這個堆棧幀來保留當前函數(shù)的狀態(tài)值。如果不需要保存狀態(tài)值,則可以重用堆棧幀而不會導致堆棧溢出。

以n的階乘為例:

正常遞歸:

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

尾部遞歸:

如果n=3,則每次調(diào)用都可以重用堆棧幀,因為不需要保存狀態(tài)值。

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