動態規劃:動態規劃入門,斐波那契數列的高效解法
斐波那契數列定義爲f(0)=0,f(1)=1,n>1時f(n)=f(n-1)+f(n-2)。直接遞歸計算時,因重複計算過多,時間複雜度達O(2^n),效率極低。 動態規劃通過空間換時間優化:一是記憶化遞歸,用備忘錄數組存儲已計算結果,每個子問題僅算一次,時間與空間複雜度均爲O(n);二是遞推法,僅用兩個變量迭代計算,時間O(n)、空間O(1),爲最優解。 動態規劃核心特性是重疊子問題(子問題重複出現)與最優子結構(當前解依賴子問題解)。其本質是通過存儲子問題結果避免重複計算,斐波那契是經典入門案例,掌握後可推廣至爬樓梯等同類問題。
閱讀全文遞歸:遞歸是什麼?用斐波那契數列舉例,初學者也能懂
這篇文章用生活化的例子和經典案例講解了遞歸的概念。遞歸是將大問題分解爲更小的同類問題,直到問題小到可直接解決(終止條件),再通過小問題結果反推大問題結果的方法,核心是“分解”與“終止”。 以斐波那契數列爲例,其遞歸定義爲:F(0)=0,F(1)=1,n>1時F(n)=F(n-1)+F(n-2)。計算F(5)時,需先算F(4)和F(3),依此類推,直到分解到F(0)或F(1)(終止條件),再逐層返回結果。遞歸的關鍵是必須有明確終止條件(如n=0、1),且每次調用規模遞減,否則會無限循環。 Python代碼實現簡潔:`def fibonacci(n): if n==0: return 0; elif n==1: return 1; else: return fibonacci(n-1)+fibonacci(n-2)`。遞歸代碼優雅但計算大數字(如F(100))時效率低於迭代法,體現了“以退爲
閱讀全文遞歸怎麼理解?用斐波那契數列輕鬆學遞歸
遞歸是“自己調用自己”的解決問題方法,將大問題分解爲更小的同類子問題,直至子問題可直接解決,再逐層返回結果(如俄羅斯套娃拆解)。其核心要素是**終止條件**(避免無限循環,如n=0、n=1時返回固定值)和**遞歸關係**(分解爲子問題,如F(n)=F(n-1)+F(n-2))。 以斐波那契數列爲例,遞歸函數`fib(n)`通過終止條件和遞歸關係實現:`fib(0)=0`、`fib(1)=1`,`fib(n)=fib(n-1)+fib(n-2)`。以`fib(5)`爲例,需遞歸計算`fib(4)`與`fib(3)`,逐層分解至`fib(1)`和`fib(0)`,再反向組合結果,最終得到答案。 遞歸過程如“剝洋蔥”,觸底後反彈。優點是邏輯清晰、易實現,但存在重複計算(如`fib(3)`被多次調用),效率較低,可通過記憶化或迭代優化。 遞歸本質是“大問題化小,小問題
閱讀全文