13. Deret Fibonacci

PHP Dasar: 3 Cara Membuat Deret Fibonacci

Fibonacci adalah salah satu kasus logika yang cukup menantang bagi orang-orang yang sedang belajar logika pemrograman. Kita bisa dengan mudah memahami fibonacci, tapi untuk memecahkannya dalam bentuk logika pemrograman, ternyata cukup bikin pusing juga.

Di dalam tutorial ini, kita akan mencoba 3 buah solusi pemecahan teka-teki fibonacci dengan menggunakan PHP. Ketiga solusi tersebut adalah: menggunakan array, menggunakan variabel bantuan, dan yang terakhir adalah menggunakan fungsi rekursif.

Persiapan

Sebelum mengikuti tutorial ini, saya anggap anda telah mengikuti tutorial-tutorial sebelumnya pada Seri Tutorial Belajar PHP 7 Dasar Untuk Pemula. Lebih khususnya adalah pembahasan tentang:

Karena jika anda belum memahami 4 pembahasan di atas, anda mungkin akan mendapatkan kesulitan di beberapa bagian pada tutorial ini.

Apa itu Fibonacci?

Fibonacci adalah deretan bilangan yang mana setiap bilangan adalah hasil penjumlahan dari dua angka sebelumnya.

Fibonacci selalu diawali oleh 2 bilangan pertama yaitu 0 dan 1. Setelah dua bilangan tersebut, barulah pada bilangan ke-3, nilainya diambil dari hasil penjumlahan dari dua bilangan sebelumnya, dan seterusnya.

# dua bilangan awal
0 1

# bilangan selanjutnya adalah hasil penjumlahan dua bilangan sebelumnya
0 1 1 2 3 5 8

Pemecahan Masalah

Bagi yang baru belajar algoritma pemrograman, kasus ini sangat menantang sekali. Melatih pikiran dan mengasah logika.

Setiap orang bisa berhasil memecahkan teka-teki bilangan fibonacci ini dengan cara yang berbeda-beda. Dan ini normal.

Sehingga saya sarankan bagi anda semua, agar berjuang sendiri terlebih dahulu untuk memecahkan kasus ini. Setelah berhasil, anda bisa kembali lagi ke artikel ini untuk membandingkan apakah penyelesaian yang anda lakukan sama atau tidak dengan yang saya lakukan.

Tapi jika anda ingin cepat-cepat, anda bisa langsung mencoba 3 solusi di bawah.

Solusi 1: Menggunakan array

Saat saya berada di awal-awal semester perkuliahan, saya berhasil menyelesaikan kasus fibonacci dengan memanfaatkan array. Waktu itu bahasa pemrograman yang saya gunakan adalah java.

Akan tetapi karena saat itu pelajaran di kelas masih belum sampai pada materi array, dosen saya terlihat tidak terlalu senang ketika saya menggunakan array untuk memecahkan kasus fibonacci.

Apa pun itu, dengan menggunakan array, anda bisa menyelesaikan kasus fibonacci dengan sangat mudah.

Ikuti langkah-langkah berikut:

1. Buat sebuah fungsi untuk mengembalikan array

Kita buat sebuah fungsi dengan nama fibonacci. Fungsi ini menerima satu parameter yaitu $jumlahBilangan dengan tipe data integer.

Di dalam fungsi ini, kita buat sebuah array dengan nama $fibonacci lalu me-return-nya.

Nantinya array tersebut akan kita isi dengan himpunan deret bilangan fibonacci. Untuk sekarang, kita biarkan dulu ia tetap kosong.

<?php

function fibonacci (int $jumlahBilangan) {
  // array ini akan digunakan untuk menampung bilangan
  $fibonacci = [];

  return $fibonacci;
}

2. Buat perulangan sebanyak $jumlahBilangan

Setelah membuat fungsi fibonacci(), kita akan membuat sebuah perulangan menggunakan for yang akan melakukan perulangan sejumlah nilai dari parameter $jumlahBilangan.

Letakkan kode program berikut ini setelah pendeklarasian array $fibonacci dan sebelum perintah return.

<?php 

for ($i = 0; $i < $jumlahBilangan; $i++) {
  // penyusunan bilangan fibonacci
}

3. Mulai menyusun bilangan fibonacci

Setelah kita membuat sebuah fungsi dan juga sebuah perulangan for, sekarang saatnya kita mulai menyusun bilangan deret fibonacci.

Alurnya adalah:

  • indeks 0 akan menghasilkan bilangan 0
  • indeks 1 akan menghasilkan bilangan 1
  • indeks > 1 akan menghasilkan penjumlahan dari dua bilangan sebelumnya

Atau bisa kita singkat menjadi 2 kondisi saja:

  • indeks < 2 mengembalikan nilai indeks itu sendiri
  • indeks > 1 akan menghasilkan penjumlahan dari dua bilangan sebelumnya

Ubah perulangan for di atas menjadi seperti berikut:

<?php
for ($i = 0; $i < $jumlahBilangan; $i++) {
  if ($i < 2) {
    $bilangan = $i;
  } else {
    $bilangan = $fibonacci[$i - 1] + $fibonacci[$i - 2];
  }

  array_push($fibonacci, $bilangan);
}

4. Hasil akhir

Jangan lupa bahwa nilai $jumlahBilangan tidak boleh kurang dari 0, sehingga sebelum perulangan for di atas, kita lakukan pemeriksaan terlebih dulu.

Berikut ini adalah kode lengkapnya:

<?php

function fibonacci (int $jumlahBilangan) {
  # array ini akan digunakan untuk menampung bilangan fibonacci
  $fibonacci = [];

  if ($jumlahBilangan < 0) {
    # langsung hentikan fungsi jika $jumlahBilangan kurang dari 0
    return $fibonacci; 
  }

  # mulai perulangan
  for ($i = 0; $i < $jumlahBilangan; $i++) {
    if ($i < 2) {
      $bilangan = $i;
    } else {
      $bilangan = $fibonacci[$i - 1] + $fibonacci[$i - 2];
    }

    # tambahkan $bilangan ke dalam array $fibonacci
    array_push($fibonacci, $bilangan);
  }

  return $fibonacci;
}

Setelah melengkapi kode program untuk fungsi fibonacci(), kita bisa memanggilnya sebagaimana berikut:

<?php

# panggil fungsi fibonacci dengan berbagai parameter
echo implode(" ", fibonacci(5)) . '<br>';
echo implode(" ", fibonacci(8)) . '<br>';
echo implode(" ", fibonacci(10)) . '<br>';
echo implode(" ", fibonacci(13)) . '<br>';

Output:

0 1 1 2 3
0 1 1 2 3 5 8 13
0 1 1 2 3 5 8 13 21 34
0 1 1 2 3 5 8 13 21 34 55 89 144

Solusi 2: Menggunakan variabel bantuan

Solusi kedua ini tidak jauh berbeda dengan sebelumnya. Hanya saja di sini kita tidak menggunakan array sama sekali. Akan tetapi kita menggunakan 2 buah variabel untuk menyimpan 2 bilangan sebelum bilangan yang sedang aktif.

<?php

function fibonacciSolusi2 (int $jumlahBilangan) {
  # string untuk menyimpan bilangan fibonacci
  $fibonacci = "";
  $satuBilanganSebelumnya = 0;
  $duaBilanganSebelumnya = 1;

  if ($jumlahBilangan < 0) {
    return $fibonacci; # langsung hentikan fungsi di sini
  }

  for ($i = 0; $i < $jumlahBilangan; $i++) {
    if ($i < 1) {
      $bilangan = $i;
    } else {
      $bilangan = $satuBilanganSebelumnya + $duaBilanganSebelumnya;

      # update variabel untuk bilangan sebelumnya
      $duaBilanganSebelumnya = $satuBilanganSebelumnya;
      $satuBilanganSebelumnya = $bilangan;
    }
  
    # tambahkan bilangan ke dalam string
    $fibonacci .= "{$bilangan} ";
  }

  return $fibonacci;
}

Setelah membuat fungsi, kita panggil fungsi tersebut.

<?php

# panggil fungsi fibonacci dengan berbagai parameter
echo fibonacciSolusi2(5) . '<br>';
echo fibonacciSolusi2(8) . '<br>';
echo fibonacciSolusi2(10) . '<br>';
echo fibonacciSolusi2(13) . '<br>';

Berikut adalah output yang kita dapatkan, hasilnya tetap sama dengan solusi sebelumnya:

0 1 1 2 3
0 1 1 2 3 5 8 13
0 1 1 2 3 5 8 13 21 34
0 1 1 2 3 5 8 13 21 34 55 89 144

Solusi 3: Menggunakan fungsi rekursif

Solusi 3 adalah menggunakan fungsi rekursif. Solusinya sangat simpel. Akan tetapi fungsi di bawah ini hanya untuk mendapatkan angka ke-n saja dari deret fibonacci.

Sehingga jika kita ingin mendapatkan keseluruhan deret fibonacci, fungsi di bawah ini tidak efektif karena ia akan melakukan perulangan berkali-kali.

<?php

function fibonacciRekursif ($n) {
  # sama seperti logika sebelumnya
  # kalau $n bernilai 0 atau 1, dia akan dikembalikan apa adanya
  if ($n <= 1) {
    # di sini proses rekursif akan berhenti memanggil dirinya sendiri
    return $n;
  }

  # jika ternyata $n lebih dari 1, maka ia akan memanggil dirinya sendiri
  return fibonacciRekursif($n - 1) + fibonacciRekursif($n - 2);
}

Lalu panggil fungsi di atas beberapa kali untuk memeriksa apakah fungsi tersebut sudah benar atau tidak.

<?php

# kita panggil satu-satu
echo fibonacciRekursif(0) . " "; # 0
echo fibonacciRekursif(1) . " "; # 1
echo fibonacciRekursif(2) . " "; # 1
echo fibonacciRekursif(3) . " "; # 2
echo fibonacciRekursif(4) . " "; # 3
echo fibonacciRekursif(5) . " "; # 5

Output:

0 1 1 2 3 5

Atau bisa kita panggil menggunakan for untuk mempersingkat sintaks:

<?php

for ($i = 0; $i < 10; $i++) {
  echo fibonacciRekursif($i) . ' ';
}

Output:

0 1 1 2 3 5 8 13 21 34

Kesimpulan

Fibonacci adalah salah satu kasus logika yang cukup menantang bagi orang-orang yang sedang belajar logika pemrograman. Fibonacci bisa kita pecahkan dengan berbagai macam cara, tergantung pada masing-masing penulis kodenya.

Di dalam tutorial ini, kita telah mencoba 3 buah solusi pemecahan teka-teki fibonacci dengan menggunakan PHP. Ketiga solusi tersebut adalah: menggunakan arraymenggunakan variabel bantuan, dan yang terakhir adalah menggunakan fungsi rekursif.

Dari ketiga cara tersebut, saya lebih rekomendasikan cara yang pertama.

Pembahasan Selanjutnya

Akhirnya kita telah selesai juga dari seri tutorial PHP 7 dasar. Kita telah membahas berbagai hal penting mulai dari berkenalan dengan file PHP, variabel dan tipe data, pembahasan struktur kontrol PHP seperti percabangan dan perulangan, fungsi, dan lain sebagainya.

Tutorial tentang fibonacci ini adalah akhir dari seri belajar php 7 dasar, insyaallah pada pertemuan selanjutnya kita akan memasuki seri baru untuk tutorial PHP. Yaitu belajar PHP untuk tingkat menengah!

Jika anda rasa tutorial ini bermanfaat, silakan share ke teman-teman anda!

Terima kasih banyak.