Algoritma Fibonacci: Keindahan Deret dan Implementasinya

0, 1, 1, 2, 3, 5, 8, 13, 21, ... Setiap angka adalah jumlah dari dua angka sebelumnya. Deret yang Menakjubkan

Dalam dunia pemrograman dan matematika, terdapat beberapa konsep yang begitu elegan dan seringkali muncul dalam berbagai konteks. Salah satu yang paling terkenal adalah algoritma Fibonacci. Deret Fibonacci, sebuah urutan angka di mana setiap angka adalah jumlah dari dua angka sebelumnya, telah memikat para matematikawan, ilmuwan, dan insinyur selama berabad-abad karena kemunculannya yang misterius di alam serta aplikasinya yang luas.

Asal-usul Deret Fibonacci

Deret ini dinamai dari Leonardo dari Pisa, yang lebih dikenal sebagai Fibonacci. Pada abad ke-13, dalam bukunya yang berjudul Liber Abaci, ia memperkenalkan deret ini melalui sebuah masalah sederhana tentang pertumbuhan populasi kelinci. Masalah tersebut berbunyi:

Misalkan ada sepasang kelinci yang baru lahir. Kelinci betina akan matang setelah satu bulan, dan setiap pasangan kelinci yang matang akan melahirkan sepasang kelinci baru setiap bulan berikutnya. Berapa banyak pasangan kelinci yang akan ada setelah satu tahun, jika tidak ada kelinci yang mati?

Dengan asumsi awal bahwa pasangan kelinci pertama lahir di bulan pertama dan mulai berkembang biak di bulan kedua, jumlah pasangan kelinci pada setiap bulan berturut-turut akan mengikuti pola: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144. Jika kita memulai dengan angka 0, urutannya menjadi 0, 1, 1, 2, 3, 5, dan seterusnya.

Definisi Formal

Secara matematis, deret Fibonacci didefinisikan sebagai berikut:

Di mana F(n) adalah suku ke-n dalam deret Fibonacci.

Implementasi Algoritma Fibonacci

Ada beberapa cara untuk mengimplementasikan algoritma Fibonacci dalam pemrograman. Dua metode yang paling umum adalah menggunakan pendekatan rekursif dan iteratif.

1. Pendekatan Rekursif

Pendekatan rekursif secara langsung menerjemahkan definisi matematis ke dalam kode. Sebuah fungsi memanggil dirinya sendiri untuk menghitung suku-suku sebelumnya.


function fibonacciRecursive(n) {
  if (n <= 1) {
    return n;
  }
  return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
        

Meskipun elegan dan mudah dipahami, pendekatan rekursif ini sangat tidak efisien untuk nilai n yang besar. Hal ini karena banyak perhitungan yang diulang. Misalnya, untuk menghitung F(5), kita perlu menghitung F(4) dan F(3). Untuk menghitung F(4), kita kembali perlu menghitung F(3) dan F(2). Perhatikan bahwa F(3) dihitung dua kali.

2. Pendekatan Iteratif

Pendekatan iteratif menggunakan loop untuk membangun deret dari awal hingga suku yang diinginkan. Metode ini jauh lebih efisien karena setiap suku hanya dihitung sekali.


function fibonacciIterative(n) {
  if (n <= 1) {
    return n;
  }

  let a = 0;
  let b = 1;
  let temp;

  for (let i = 2; i <= n; i++) {
    temp = a + b;
    a = b;
    b = temp;
  }
  return b;
}
        

Pendekatan iteratif ini lebih disukai dalam praktik karena performanya yang lebih baik, terutama ketika berhadapan dengan nilai n yang besar. Efisiensi waktu kompleksitasnya adalah O(n).

3. Pendekatan dengan Memoization (Dynamic Programming)

Untuk mengatasi inefisiensi rekursif namun tetap mempertahankan strukturnya, kita dapat menggunakan teknik memoization. Ini adalah bentuk pemrograman dinamis di mana hasil dari pemanggilan fungsi yang mahal disimpan (di-cache) sehingga dapat dikembalikan ketika input yang sama muncul lagi.


function fibonacciMemoized(n, memo = {}) {
  if (n in memo) {
    return memo[n];
  }
  if (n <= 1) {
    return n;
  }
  memo[n] = fibonacciMemoized(n - 1, memo) + fibonacciMemoized(n - 2, memo);
  return memo[n];
}
        

Dengan memoization, kompleksitas waktu menjadi O(n), sama seperti pendekatan iteratif, namun dengan ruang tambahan untuk menyimpan hasil-hasil yang sudah dihitung (kompleksitas ruang O(n)).

Kehadiran Fibonacci di Alam Semesta

Salah satu aspek yang paling menarik dari deret Fibonacci adalah keberadaannya yang meluas di alam. Pola Fibonacci dapat ditemukan dalam:

Algoritma Fibonacci bukan hanya sekadar urutan angka. Ia adalah jendela ke dalam keindahan matematika yang terjalin dengan alam, sebuah konsep yang terus memicu rasa ingin tahu dan eksplorasi dalam berbagai disiplin ilmu. Baik dalam kode program yang efisien maupun dalam pola yang ditemukan di alam semesta, deret Fibonacci membuktikan bahwa kesederhanaan terkadang dapat menghasilkan kompleksitas dan keindahan yang luar biasa.

🏠 Homepage