遞迴,迭代還是其他?

2021-06-02 19:31:23 字數 821 閱讀 4485

1.問題描述:

(1)乙隻青蛙一次可以跳上1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。

(2)乙隻青蛙一次可以跳上1級台階,也可以跳上2 級……它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?

2.遞迴:

在遞迴裡面,乙個子程式自己負責解決摸個問題的一小部分,他還把問題分解成很多的小塊,然後呼叫自己來分別解決每一小塊。當問題的小部分很容易解決,而問題的大部分也很容易分解成眾多的小部分時,常常會用到遞迴。

遞迴並不常用,但如果使用得謹慎,還是可以得到非常優雅的解。他的思考方式是:要解決這個大問題,先解決小問題,小問題和大問題是一類問題,只是規模不一樣而已。

按照這個思維方式,你可能很快就寫出乙個簡潔的程式。每當我們對自己新想出來的遞迴演算法自我陶醉的時候,是否想過還有更加高效的演算法?

3.迭代:

如果我們的思考方式是:先解決小問題,再解決大問題,每前進一步,規模大的就被解決一點……

這就是迭代法,根據小規模算出大規模,在算出更大規模,知道算出我們要求的問題規模。

4.還有更好的嗎?

其實大多數遞迴或迭代的問題都能轉化為非遞迴演算法。更厲害的演算法複雜度可以降到o(1)。

毋庸置疑,第乙個不就是斐波那契數列麼。除了遞迴和迭代這種效能一般的方法,還能怎麼解決?其實很多遞推公式都可以解成關於n的函式,這個在組合數學這門課中會詳細介紹。

附上上面兩個問題的**:

double fib(int n)

double nb_fib(int n)

所以以後在遇到遞迴和迭代的時候,看看能不能轉化成非遞迴演算法!

遞迴快還是迴圈(迭代)快?

1.演算法抽象上所謂的迴圈 更準確點說,叫做迭代 順便,c艹有的是 迭代語句 而不是 迴圈語句 是遞迴的特例。寫成迴圈的東西能直接轉寫成遞迴形式,反過來就得自己造活動記錄了 例如棧 2.遞迴呼叫需要維護活動記錄,而迭代直接復用了儲存,可以省略這些開銷,所以體系結構若執行顯式遞迴呼叫一般更慢。但這裡一...

遞迴和迭代 迭代與遞迴

很多程式設計小白都會遇到 迭代 和 遞迴 的問題 包括我自己 大部分同學還是不知道迭代與遞迴的區別。下面我就嘗試用最通俗易懂的模式講解遞迴與迭代的區別。1.迭代 迭代其實很簡單,我們在程式設計中經常用到迭代。比如說 i 1 print i 這個就是乙個迭代,沒想到吧。迭代的意思其實就是在迴圈 現了參...

遞迴與迭代

遞迴與迭代都是基於控制結構 迭代用重複結構,而遞迴用選擇結構。遞迴與迭代都涉及重複 迭代顯式使用重複結構,而遞迴通過重複函式呼叫實現重複。遞迴與迭代都涉及終止測試 迭代在迴圈條件失敗時終止,遞迴在遇到基本情況時終止。使用計數器控制重複的迭代和遞迴都逐漸到達終止點 迭代一直修改計數器,直到計數器值使迴...