回覆列表
-
1 # 純潔的激進派
-
2 # 星火天穹
可以的。比如動態規劃。但是遞迴是一種思想,是其它一些更高階演算法的基石,還是要學習研究一下的。蘋果的喬布斯年輕時就很喜歡研究遞迴演算法。
-
3 # 渡雲天
遞迴就是自己呼叫自己。
既然是自己呼叫自己,能完成這個操作的一般就是函式或者過程。
函式在遞迴呼叫自己的時候,就好比剝洋蔥皮一般,只要洋蔥沒有剝完,就呼叫自身繼續剝下一層,每剝一層皮就看看是否剝完了,完事就結束(需要一次一次的返回到最開始剝洋蔥皮那次才能最終結束),沒剝完就繼續呼叫自身剝下一層…
因為每呼叫一次自身,都需要進行一系列的“保護現場”、當前函式“退場”,新的函式“入場”等操作,並且等最終完成時還得按照相反順序逐次(執行多少次得到結果就返回多少次)返回“同一個函式”的運算結果,一直到最初呼叫函式的時候,這才算完。
使用遞迴的一大優點就是思路流暢、程式碼簡潔,不過代價也比較大,可以想象,使用遞迴時的時間、空間開銷實在是傷不起。
遞迴演算法用非遞迴演算法解決,一般有如下方法:
1、可以用迴圈結構的演算法替代 ;
2、自己用堆疊模擬執行時棧,分析只儲存必須儲存的資訊,從而用非遞迴演算法替代遞迴演算法。
遞迴是演算法,和語言沒關係。你如果學過演算法分析,就應該知道,遞迴可以用樹遍歷演算法實現。遞迴的空間複雜度高,樹遍歷的時間複雜度高。