在很久很久以前…有一次和同事聊天,提到了迭代和遞迴,簡單思考記錄如下。
原問題採用分而治之思想,可分解成子問題,且子問題解決的邏輯與原問題一樣,但規模更小,採用輪迴正規化。
遞迴的關鍵是:
原問題可拆解,且規模更小,與原問題邏輯相同。(自己調自己的基礎)。
找到base case遞迴的零號問題,最小的那個問題可直接給出結果,即程式的出口。
通過小問題的解構造大問題的解,使用測試資料驗證邏輯的正確性。
缺點:正常的寫法會導致效能不好(可用各種方法進行時空優化,比如動態規劃…),玩不好會棧(stack)溢位。
迭代也叫輾轉法,通過一次次的迴圈,一輪輪的計算,不斷用舊值推新值(推陳出新),接近或得到最終結果。個人感覺,迭代中可以分而治之,也可不分而治之,每輪迭代中的邏輯不一定與原問題解決邏輯等價。
迭代思想的體現:
求最大公約數的歐幾里得演算法。
求近似平方根的牛頓迭代法。
二分查詢法。
持續交付,不斷優化。
遞迴和迭代 迭代與遞迴
很多程式設計小白都會遇到 迭代 和 遞迴 的問題 包括我自己 大部分同學還是不知道迭代與遞迴的區別。下面我就嘗試用最通俗易懂的模式講解遞迴與迭代的區別。1.迭代 迭代其實很簡單,我們在程式設計中經常用到迭代。比如說 i 1 print i 這個就是乙個迭代,沒想到吧。迭代的意思其實就是在迴圈 現了參...
遞迴和迭代
遞迴和迭代是兩種常用的演算法,很多人知道怎麼寫遞迴和迭代,但是不知道什麼時候該用遞迴,什麼時候該用迭代。下面的 分別通過使用遞迴和迭代計算fibonacci數列,可以很清楚的看到效率的驚人差別。當然,很難有個準則說什麼時候該用遞迴,什麼時候該用迭代,但有乙個很簡單的判斷方法 如果你的遞迴呼叫是在函式...
遞迴和迭代
分享自 酷勤網 www.kuqin.com 遞迴函式 遞迴可以描述不同的概念,如果說乙個函式是遞迴的,那麼就是說函式的定義中 直接或者間接地 引用了該函式本身。比如求斐波那契數列,使用swift實現 func fib n int intreturn fib n 1 fib n 2 從函式定義看,fi...