如何將遞迴轉化為迭代?

時間 2021-05-31 03:59:47

1樓:寫程式的考拉

要想清楚這個問題,首先要明白:遞迴是什麼?迭代是什麼?

遞迴本質上來說,其實就是【我用我自己】,把乙個問題轉換為小規模的同樣的問題。

迭代的話,就是在原來的基礎上,算出來後續的東西,並沒有【自己用自己】的那一步。可能是乙個迴圈下來,前面的結果在後面跟著用。

其實這麼看下來,迭代有一點動態規劃的感覺。也就是說,我們把小規模的問題先算出來了,記錄下來,再算大規模的。

而遞迴是我還沒算出來小規模的結果,先來假設小規模的算出來了,直接把這個結果的計算過程寫在了函式體中。

比如,乙個斐波那契的例子:

遞迴:f(n) = f(n-1) + f(n-2),接下來要算f(10)就直接寫上f(9) + f(8)

迭代:先把小的算出來,把f(1), f(2), f(3), f(4)依次記錄下來,再算後面的。

2樓:聽雨

lz需要學習一下回溯演算法。遞迴是電腦自動生成棧。回溯相當於把棧全部手動用陣列儲存起來,並用乙個變數記錄當前在哪一層以及什麼時候前進什麼時候後退。

原理基本就這樣了。剩下的就是理解和練習。如果你遞迴還沒理解透的話,先去練習深搜吧

3樓:Harald Hardrada

看了一下所有遞迴都可以改寫成迴圈嗎?我認為答案並不是很完美而且有些高票答案依舊很有誤導性。

理論上(church turing thesis)講遞迴是都可以變成迭代的。recursion <-> iteration.

但是如果是recursion optimization,即為了提高效率而變成迭代的話,那麼就只有尾遞迴才可以了。

最簡單的乙個反例就是,如果這麼寫n!的話,那麼就無法將這個函式從遞迴轉化為迭代。

def factorial(n)

if (n == 0) return 1;

return n*factorial(n-1);end

4樓:

你可以感受一下。。

如何將五線譜轉化為簡譜?

呼嚕嚕 首調的話,框住的那條線,就是 口所在的那條線是7,然後你就可以數線線去推每個音符是什麼音了。靈魂畫手出圖 但是,這是鋼琴譜啊,您翻成簡譜就沒法彈啦 高克之 如果不是排阿卡貝拉或者合唱的話不建議翻成簡譜。一般五線譜翻簡譜先看調號咯,然後1234567往下寫就行了。個別的五線譜有bug,比如F調...

如何將ISIS成員轉化為溫柔且充滿理性和智慧型,對人類無害的人?

KEVINS 有的 營造乙個環境,乙個只有他乙個穆斯林的環境,不讓他接觸到任何極端思想,然後周圍環境與他腦中截然不同且無法付諸實踐,然後他會因為人類基因中的從眾心理同化 將ISIS成員轉化為溫柔且充滿理性和智慧型,對人類無害的人.並不難!但首先要徵得ISIS成員本人的同意,對不對?如何徵得ISIS的...

如何將多個目標轉化為乙個適合自己的目標?

遠方 多個目標也就是子目標,這都是圍繞最終的目標做的準備。這就好比是乙個網狀結構,如同樹根一樣。首先確定一中心目標,既適合自己的發展方向,然後分子目標既所列規劃的思維導圖,從完成分支子目標開始,一步一步最後實現總目標,既中心目標。 老黃 目標應該是個樹狀結構,如果有多個目標,可以採用向上遞迴的方式,...