演算法學習01 生兔子的問題

2021-08-09 18:31:05 字數 1213 閱讀 1942

/*【程式1】

題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數為多少?

1.程式分析: 兔子的規律為數列1,1,2,3,5,8,13,21....

*/其實這個問題是找規律得出公式,其中規律是nx=(n-1)x+(n-2)x;//其實我也不知道公式該不該這麼寫,寫出來感覺**不對

根據所得出的公式解決來寫**,使用遞迴

/*

* 【程式1】 題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,

* 問每個月的兔子總數為多少? 1.程式分析: 兔子的規律為數列1,1,2,3,5,8,13,21,34,55....

*/public static long tuzi01(int month) else if (month == 3)

return tuzi01(month - 1) + tuzi01(month - 2);

}

**是寫出來了,但是測試的時候出現了乙個問題,那就是當月份越大越慢,當月份為60的時候將近執行運算了1分鐘。

哇,那這算法學個毛線,於是想了想問題出在了遞迴上,因為是直接呼叫method所以數量越大呼叫的越多,而且本身是在重複呼叫,於是用乙個陣列來儲存臨時的每個月的兔子數,這樣會省去一定的運算。

/*

* 【程式1】 題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,

* 問每個月的兔子總數為多少? 1.程式分析: 兔子的規律為數列1,1,2,3,5,8,13,21,34,55....

*/class shengtuzi else if (month == 3)

if (tuzi[month] == 0)

return tuzi[month];

}}

然後我看了標準答案。。。。。。。。。擦,感覺用遞迴有點low,而且我沒看清題目,要算出每個月的兔子對數。。。擦
public static void main(string args)

}

演算法 演算法學習01

貪婪 可以理解為最簡單基礎的求解方式,特點是 短視性 從這個特點入手很容易理解每一步取其最優的原理。雖然最終結果不一定是最好的,但是一定是較好的而且是最簡便的。因此在不過分追求最優結果或者對速度的要求高於結果的情況下,貪婪是不錯的選擇。分治可以理解為大事化小小事好搞,與貪婪的每一步的 串聯 不同,分...

演算法學習 01揹包問題

是慕課網的實戰演算法課程 動態規劃 相當於還是求n個物品的組合!暴力解法 每一件物品,都可以放進揹包,也可以不放進。複雜度是o 2 n n 對於每乙個組合,還要看看對應的總重是多少,看看是不是超過了容量c,從而看價值。組合方式都可以用遞迴的方式來求解。只是是能不能找到重疊子問題 最優子結構,從而轉換...

經典的兔子生兔子問題(C 遞迴解法)

古典問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?思路 先求出每個月新增的兔子,再用迴圈求和即可算出這個月總的兔子數。月份 新增加兔子 1 1 2 0 3 1 4 1 5 1 1 6 1 1 1 7 1 1 ...