Fibonacci atau sering disebut deret atau bilangan fibonacci adalah sebuah deret bilangan yang memiliki pola tertentu, yaitu sebuah suku ke -n , merupakan hasil penjumlahan dari suku (n-1) dengan suku (n-2). berikut adalah contohnya:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 ...

dalam contoh diatas bisa dilihat bahwa angka 8(suku ke 6) diperoleh dari 5 (suku ke-5) + 3(suku ke-4). jadi rumusnya adalah:

f(n) = f(n-1)+f(n-2)

maka contoh implementasinya di ruby adalah sebagai berikut:


def fib(n)
  if n <=2
    n =1
  else
     fib(n - 1) + fib(n - 2)
  end
end

p (1..150).map {|i| fib(i)} 

yang menjadi masalah dengan kode diatas adalah perfomanya yang lambat karena fungsi yang rekursif. berikut adalah contoh optimasi fungsi tersebut menggunakan teknik memoization agar loadnya lebih cepat:


def fib(n, cache = {})
  return 1 if n <= 2
  cache[n] ||= fib(n-1, cache) + fib(n-2, cache)
end

p (1..1000).map {|i| fib(i)}

Referensi:

  • https://devblast.com/b/ruby-fizzbuzz-fibonacci