斐波那契序列程式優化

2021-06-23 10:06:06 字數 651 閱讀 1643

最近在看高德納的《計算機程式設計藝術》,其中看到了斐波那契序列。 用**實現序列非常簡單,程式如下:

public static int x(int a)

switch (a) }

執行程式,序列資料執行也沒有問題,然而,將a值設定為50以上之後,發現執行速度非常慢。原因是在遞迴呼叫的過程中,大量的重複計算。因為是重複計算,那麼就可以通過儲存每次計算的結果,來過濾重複計算的問題。程式實現如下:

public static int x2(int a ,mapmap)else}}

return result;}

以上優化,雖然解決的執行緩慢的問題,但是,帶來的問題就是需要o(n)的空間消耗。

檢視整個序列,實際上 表示式為 f(x) = f(x-1)+f(x-2)  (x>1),因此,我們可以用兩個空間來存放f(x-1)和f(x-2)的數值,就能滿足序列的執行,附帶的空間消耗也將變為o(2)

**實現如下:

private static int next;

private static int current;

public static int x1(int a)

next = current;

current = result;

}return result;}

斐波那契序列

斐波那契 fibonacci1170 1250 義大利最傑出的數學家。其父為比薩的商人,他認為數學是有用的,因此送斐波那契向阿拉伯教師們學習數學,掌握了印度數碼之一新的記數體系,後來遊歷埃及 敘利亞 希臘 西西里 法國等地,掌握了不同國家和地區商業的算術體系,1200年回答比薩,潛心研究數學,120...

遞迴優化 斐波那契

f n f n 1 f n 2 1,2,3,5,8.自頂向下使用的遞迴層次比較多,在n取值較大的情況下,效率很低 時間維度 所以可以使用陣列來替換多重遞迴呼叫,即以空間來置換時間 intersting include include include include include include d...

斐波那契的優化

普通遞迴實現 def fib n if n 0 return 1 if n 1 return 1 if n 1 return fib n 1 fib n 2 import time t1 time.time print fib 40 t2 time.time print t2 t1 執行結果為 16...