遞迴和迴圈

2021-08-08 09:07:25 字數 934 閱讀 3045

很早之前看到過一段關於遞迴的解釋覺得很nice:

今天寫了四道關於遞迴迴圈的題

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。

n<=39

f(n) = f(n-1) + f(n-2),第一眼看就是遞迴啊,簡直完美的遞迴環境,遞迴肯定很爽,這樣想著關鍵**兩三行就搞定了,注意這題的n是從0開始的:

然而並沒有什麼用,測試用例裡肯定準備著乙個超大的n來讓stack overflow,為什麼會溢位?因為重複計算,而且重複的情況還很嚴重。

最後想到了動態規劃 兩個儲存空間即可,節省儲存空間,具體**如下:

class solution 

return temp1;}};

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

很簡單,斐波那契數列的實體化

class solution 

};

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

乙個公升級版的題目

class solution 

};

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

也是斐波那契數列的改寫

class solution 

return temp1;}};

通過這四個題目,還是對遞迴和經典的斐波那契數列有了乙個更深入的體會!!!題雖簡單但是都還蠻經典的。

遞迴和迴圈

從功能上來說,所有用遞迴實現的都可以用迴圈實現,只不過有時候遞迴實現方便一些,從效率上說,迴圈一般都是大於遞迴的。如果要處理的問題的深度不大,我認為遞迴和迭代的效率差不多。遞迴是消費棧空間,先遞推 壓棧 然後回歸 逐步釋放占用的棧 如果遞迴的深度比較大的話會很消耗記憶體,如果沒有終止條件會導致棧溢位...

迴圈和遞迴

改為遞迴的關鍵是發現邏輯的 相似性 不要忘記遞迴的 出口 例子 使用遞迴模擬迴圈 列印0到9 public staitc void main string args 修改 列印0 n public static void f int n 接下來我們實現公升序的遞迴,比如列印0到9,這裡為了更一般化,...

遞迴和迴圈

迴圈 迴圈列印整數 public class test9 遞迴 直接或者間接呼叫本身 1.遞迴一定要有退出遞迴的條件 2.思維方式 用來解決複雜問題,不需要太多的邏輯問題。降解 3.方法執行順序 彈棧和壓棧 4.降解 執行順序 只處理本身,其他問題交給下乙個人,大任務分解成小任務。1 列印不指定整數...