October 17, 2023

Viiisit [Ruby] - 費波那契數 Successione di Fibonacci!

#interview#ruby

面試上很常見的費氏數列,來看看如何用 Ruby 的方法來定義吧!

費波那契數 Successione di Fibonacci

在數學上,費波那契數是以遞迴的方法來定義:

1
2
3
F0 = 0; 
F1 = 1;
Fn = F(n-1) + F(n-2) (n >= 2)

0, 1, 1, 2, 3, 5, 8, 13…
用文字來說,就是費氏數列由0和1開始,之後的費波那契數就是由之前的兩數相加而得出。

fib

遞迴 (Recursive) 是自己呼叫自己的函式,目的是要使用相同的方法,解決重複性的問題。

Remark

遞迴通常用於解決問題的特點是可以被分解為相同結構的子問題,每個子問題都可以使用相同的方法解決。這樣的方法常常以簡單的基本情況為終止條件(例如:設定最小單位),以確保遞迴不會無限運行,也就是說,要用遞迴函式必須確定最小單位是什麼!否則,會發生 stackoverflow 堆疊滿出來的情形!!!

Method 2 使用動態方法,在計算過程中避免重複計算,
運用陣列 fib_array 來存已經計算過的斐波那契數值。
Method 2 僅計算一次每個斐波那契數,然後重複使用這些值,因此性能較高。此方法的計算時間是線性,因此不會像 Method 1 那樣出現指數級的計算時間增長。