本人的遞迴水平一直很爛 有一段時間不寫** 再寫的時候 就會不自覺的避開遞迴的想法 而且平常做的題目 比如樹或者圖的dfs,或者backtracking dp等等 只要能避開遞迴就避開 長此以往,每次遇到乙個新的題目,自己的思維裡面跟本就沒有遞迴思想,或者就算知道這種應該遞迴做但是心裡仍然在打怵,所以接下來就說一下最適合我的遞迴思路。
首先就不要怕 怕個錘子 不就是寫錯了嘛 又不是說遞迴一定是對的啥的。
首先啥是遞迴?
遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
然後就是想一想引數列表,這些引數 有些是我們真正的輸入,比如整個圖的hashmap,有些引數 是我們在遞迴的過程中逐步構建,他們是最後的答案或者是答案的一部分,有些引數 是我們的指標 用於遍歷輸入的map的指標。(有的時候 我們在做圖的題目的時候 會在引數列表中加上curnode這一項 然後還會加入seen/visited這一項)
然後想一想這個函式是幹嘛的 雖然都叫dfs但是他只是乙個空殼。這個時候找到等價關係式,就跟dp裡面的公式一樣。(先不要考慮corner case和遞迴終止條件)
然後再想一想這個遞迴終止的條件是什麼。我們究竟是要 返回void 還是每次要尾遞迴 還是不要尾遞迴。總體來說情況有以下幾種:我們不返回void,但是我們使用尾遞迴 或者 我們不返回void,但是我們使用提前遞迴 或者 我們返回void 這樣的話基本上是要提前終止或者最後終止(即return的位置)
注意 return和是不是用尾遞迴沒啥關係 尾遞迴只是後return了乙個當前遞迴函式而已,如果我們這個遞迴函式返回void的話 就直接寫遞迴函式就行了 根本不用return。
最後 有哪些東西用遞迴用的多呢?
鍊錶本來是乙個很好的用遞迴的資料結構 但是實際我寫**的時候很少用。
樹:這個資料結構簡直就是為遞迴量身打造的,除了bfs我們推薦用queue之外 其他的需要我們前序中序後序遍歷的時候要用遞迴(就是說 找路徑的時候)
圖:dfs的時候我們最好也用遞迴
此外 還有 在構建 並查集的時候find()函式最好也用遞迴。
第十二章 程式設計師的恐懼感
第十二章 程式設計師的恐懼感 你看過韓劇 大長今 嗎?如果沒有看過,那麼建議你看看。我自己就看過好幾遍,特別是從長今學醫開始的那一段。我們能從長今身上學到些什麼?也許很多人會說學到了成長的艱辛,不屈不撓的精神等等。可我現在要說的,卻是長今在宮中進行醫女培訓過程中,申益必教授對長今的評價 你不適合當醫...
如何克服枯燥工作帶來的單調感和厭煩感
如何克服枯燥工作帶來的單調感和厭煩感 十一長假之後,很多2011應屆生來找我聊天,說是感覺心裡壓力比較大。對日復一日的工作產生了單調感和厭煩感,請求幫助和解決。這種現象是正常的,只是感覺現在就體會所為的重複工作的厭煩感,時間有些早。本來以為會在春節後才會出現這種心態,不過既然出現,就藉此詳細的分析並...
如何克服枯燥工作帶來的單調感和厭煩感
十一長假之後,很多2011應屆生來找我聊天,說是感覺心裡壓力比較大。對日復一日的工作產生了單調感和厭煩感,請求幫助和解決。這種現象是正常的,只是感覺現在就體會所為的重複工作的厭煩感,時間有些早。本來以為會在春節後才會出現這種心態,不過既然出現,就藉此詳細的分析並提出一些解決建議。成因 外因和內因 外...