C語言中的遞迴程式可以用非遞迴演算法實現嗎?昂比利吾博2019-04-25 13:23:19

可以的,所有的遞迴都可以用迴圈和棧等價改寫。

C語言中的遞迴程式可以用非遞迴演算法實現嗎?渡雲天2019-04-25 13:32:01

遞迴就是自己呼叫自己。

既然是自己呼叫自己,能完成這個操作的一般就是函式或者過程。

函式在遞迴呼叫自己的時候,就好比剝洋蔥皮一般,只要洋蔥沒有剝完,就呼叫自身繼續剝下一層,每剝一層皮就看看是否剝完了,完事就結束(需要一次一次的返回到最開始剝洋蔥皮那次才能最終結束),沒剝完就繼續呼叫自身剝下一層…

因為每呼叫一次自身,都需要進行一系列的“保護現場”、當前函式“退場”,新的函式“入場”等操作,並且等最終完成時還得按照相反順序逐次(執行多少次得到結果就返回多少次)返回“同一個函式”的運算結果,一直到最初呼叫函式的時候,這才算完。

使用遞迴的一大優點就是思路流暢、程式碼簡潔,不過代價也比較大,可以想象,使用遞迴時的時間、空間開銷實在是傷不起。

遞迴演算法用非遞迴演算法解決,一般有如下方法

1、可以用迴圈結構的演算法替代 ;

2、自己用堆疊模擬執行時棧,分析只儲存必須儲存的資訊,從而用非遞迴演算法替代遞迴演算法。

C語言中的遞迴程式可以用非遞迴演算法實現嗎?純潔的激進派2019-04-25 12:39:00

遞迴是演算法,和語言沒關係。你如果學過演算法分析,就應該知道,遞迴可以用樹遍歷演算法實現。遞迴的空間複雜度高,樹遍歷的時間複雜度高。

C語言中的遞迴程式可以用非遞迴演算法實現嗎?星火天穹2019-04-25 13:01:55

可以的。比如動態規劃。但是遞迴是一種思想,是其它一些更高階演算法的基石,還是要學習研究一下的。蘋果的喬布斯年輕時就很喜歡研究遞迴演算法。