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 array, menggunakan 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.