遞歸算法的本質是將原問題轉化為壹個更小的相同問題並求解。壹般要註意兩點:
1,遞歸終止條件。它對應的是遞歸算法中最基本、最簡單的問題。
2.遞歸過程。遞歸過程需要將原始問題逐步推至更小的相同問題。更小意味著子問題更容易解決。在寫的情況下可以找到壹個遞歸公式。在這個過程中,有必要徹底理解遞歸函數的含義。弄清楚這個函數的輸入和輸出是什麽,這樣寫起來就清楚多了。
由於這個遞歸公式,我們很容易看出遞歸的終止條件是我們所知道的f(0)和f(1)。有了f(0)和f(1),我們可以繼續推導f(3)直到f(n)。
但是現在我們只使用遞歸算法的思想來解決這個問題:
像我們常見的數據結構,如鏈表、樹和圖,都有壹個自然的遞歸結構。由於鏈表是線性結構,我們通常可以通過直接循環遍歷它來解決問題,但這裏我們使用遞歸方法來解決LeetCode上面的問題。
LeetCode 203移除鏈表元素。
解析:鏈表的結構可以理解為壹個節點連接這個較短的鏈表,這樣我們壹直讀取到最後壹個節點為None,那麽我們此時的遞歸終止條件是head指向None,返回為None。
深入了解遞歸算法後,我們開始學習回溯法。通過LeetCode上面的幾個問題,我們來深入探討壹下遞歸和回溯的應用。
持續更新...
數據結構與算法系列博客:
壹、數據結構和算法概述
第二,LeetCode典型主題的整理與分析
第三,鏈表和LeetCode問題
第四,堆棧和隊列(Stack and Queue
動詞 (verb的縮寫)樹
六、遞歸和回溯算法
七。動態規劃
八、分類和搜索
九、散列表
參考數據
1、
2、
3、