費氏數列,又稱黃金分割數列,是自然界中非常常見的數列。它是由以下遞迴式所定義:
產生以下數列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
請根據動態規劃撰寫產生費氏數列的程式,輸入為數列的序數,輸出為費氏數列的數值。
通過將問題分解成多個子問題來求解複雜的問題,通常子問題會有重複性所以會搭配一些 Cache 技巧來避免重複計算子問題。
以 Fibonacci Sequence 來說 $ f(n) = f(n-1) + f(n-2) $ 當中的 $ f(n-1) $ 就是一個子問題,我們可以通過 Cache 記住 $ f(i) $ 來避免重複計算
@test fibonacci(0) == 0
@test fibonacci(1) == 1
@test fibonacci(2) == 1
@test fibonacci(4) == 3
fibonacci(0)
fibonacci(1)
fibonacci(2)
fibonacci(4)
fibonacci(10)
fibonacci(50)