Tidak lengkap rasanya jika mempelajari sebuah bahasa pemrograman tanpa memecahkan kasus deret fibonacci.
Deret fibonacci sebenarnya sangat sederhana bagi manusia. Kita bisa dengan mudah memahaminya. Akan tetapi, ketika kita harus memecahkannya dalam bentuk program, logikanya ternyata bikin pusing juga π
Oleh karena itu pada seri latihan logika python ini, kita akan membahas tentang bagaimana cara memecahkan deret bilangan fibonacci.
Apa itu bilangan fibonacci?
Fibonacci adalah sebuah deret bilangan yang mana setiap anggotanya adalah hasil penjumlahan dari 2 bilangan sebelumnya.
Bilangan fibonacci selalu diawali oleh 2 angka, yaitu 0 dan 1.
Dan mulai bilangan ke-3, barulah setiap anggota deret fibonacci dikalkulasikan berdasarkan penjumlahan dua angka sebelumnya.
Sehingga nilai dari bilangan:
- Ke-3 adalah hasil dari 0 + 1 = 1
- Ke-4 adalah hasil dari 1 + 1 = 2
- Ke-5 adalah hasil dari 2 + 1 = 3
- Ke-6 adalah hasil dari 3 + 2 = 5
- Ke-7 adalah hasil dari 5 + 3 = 8
- dan seterusnya
Berikut ini penampakan deret fibonacci dari mulai jumlah deret 2 sampai dengan jumlah deret 10:
0 1
0 1 1
0 1 1 2
0 1 1 2 3
0 1 1 2 3 5
0 1 1 2 3 5 8
0 1 1 2 3 5 8 13
0 1 1 2 3 5 8 13 21
0 1 1 2 3 5 8 13 21 34
Sebelum kita memulai menyelesaikan bilangan fibonacci dengan python, mari kita sepakati dahulu satu prinsip logika pemrogrmaan:
Bahwa untuk menyelesaikan satu kasus yang sama, kita bisa menggunakan berbagai macam cara. Tergantung dari bagaimana pola pikir kita dalam memecahkan kasus tersebut.
Sehingga, cara yang kita praktikkan pada pertemuan kali ini bukanlah satu-satunya cara untuk memecahkan kasus deret fibonacci. Bisa jadi kalian memiliki cara berpikir atau solusi lain yang lebih sederhana. Dan itu tentu saja tidak salah sama sekali selama hasil akhirnya adalah benar.
Persiapan
Pada tutorial ini insyaallah kita akan menyelesaikan teka-teki fibonacci dengan 3 solusi. Dua solusi pertama akan kita ambil pada pertemuan part pertama, sedangkan solusi ketiga (yakni solusi rekursif) insyaallah akan kita bahas pada part selanjutnya.
Sebelum kita mulai, pastikan kalian telah mengetahui dasar-dasar python terlebih dahulu, terutama pembahasan berikut:
Satu lagi, kalian juga sangat disarankan untuk ngopi β agar tidak terlalu tegang π
Langsung saja, buka alat-alat tempur kalian. Kita akan mulai dari solusi yang pertama.
Solusi 1: Menggunakan list
Solusi yang pertama adalah menggunakan list.
Menurut saya, solusi ini adalah yang paling gampang dan manusiawi. Karena sesuai dengan cara berpikir kita.
Bagaimana alurnya?
Sekali lagi, ini versi saya ya, kalian merdeka untuk mengeksplorasi alur-alur yang lain.
Alurnya adalah:
- Yang pertama kita minta user untuk menginputkan panjang deret.
- Kemudian kita siapkan dulu sebuah list dengan isi: 0 dan 1.
- Lalu kita mulai menentukan item ke tiga berdasarkan penjumlahan 2 angka sebelumnya.
Kita mulai aja satu-satu, tulis kode program berikut:
panjang = int(input('Masukkan panjang deret: '))
fibo = [0, 1]
for i in range(2, panjang):
print(f'deret ke {(i + 1)}')
Jalankan program, inputkan angka dan kita akan mendapatkan output kira-kira seperti ini:
Masukkan panjang deret: 7
deret ke 3
deret ke 4
deret ke 5
deret ke 6
deret ke 7
Oke. Saya kira cukup jelas sih. Pada kode program di atas kita telah:
- Meminta user untuk menginput panjang deret.
- Membuat list dengan nama
fibo
yang telah memiliki 2 angka pertama dari deret fibonacci. - Kemudian kita melakukan perulangan for dari angka 2 sampai ke kurang dari 7 (ingat kalau range itu dimulai dari 0).
Tugas selanjutnya, kita akan menampilkan dulu alur logika kita dalam bentuk teks.
Silakan ubah kode program kita menjadi seperti ini:
for i in range(2, panjang):
index1 = i - 2
index2 = i - 1
print(f'deret ke {(i + 1)} adalah index-{index1} + index-{index2}')
Jalankan program, lalu inputkan angka 7, dan kita akan mendapatkan output seperti berikut:
Masukkan panjang deret: 7
deret ke 3 adalah index-0 + index-1
deret ke 4 adalah index-1 + index-2
deret ke 5 adalah index-2 + index-3
deret ke 6 adalah index-3 + index-4
deret ke 7 adalah index-4 + index-5
Nah, alur kita sekarang sudah benar. Tinggal melanjutkan saja ke bagian inti.
Untuk melakukannya, silakan ubah kode perulangan di atas menjadi seperti ini:
for i in range(2, panjang):
angka1 = fibo[i - 2]
angka2 = fibo[i - 1]
angkaSelanjutnya = angka1 + angka2
fibo.append(angkaSelanjutnya)
print(fibo)
Penjelasan
Yang kita lakukan pada kode program di atas adalah:
- Mengambil 2 angka sebelumnya lalu menyimpannya pada 2 variabel (yaitu
angka1
danangka2
). - Membuat variabel baru dengan nama
angkaSelanjutnya
dengan nilai hasil penjumlahan dariangka1
danangka2
. - Hasil penjumlahan tersebut kita masukkan ke dalam list agar bisa digunakan untuk menentukan angka selanjutnya lagi.
Sehingga jika kita jalankan program di atas, kita akan mendapatkan output seperti berikut:
Masukkan panjang deret: 10
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Ok, kita telah berhasil dengan cara pertama.
Sekarang kalian bisa seruput kopinya dengan tenang π
Solusi 2: Menggunakan variabel bantuan
Kita lanjutkan untuk solusi ke-2.
Pada cara ini, kita tidak akan menggunakan list. Sebagai gantinya, kita akan menggunakan dua buah variabel bantuan untuk menyimpan 2 angka sebelumnya.
Langsung saja sebagai persiapan, tulis kode program berikut:
panjang = int(input('Masukkan panjang deret: '))
angka1, angka2 = 0, 1
Kode program di atas cukup jelas, kita meminta user untuk memasukkan panjang deret yang diinginkan, kemudian kita menyiapkan dua variabel bantuan kita.
Selanjutnya, siapkan perulangan dengan menambahkan kode program di bawah ini:
for i in range(panjang):
print(f'perulangan ke-{i}')
Kode program di atas hanya akan menampilkan perulangan biasa sesuai dengan panjang deret yang diinputkan user:
Masukkan panjang deret: 4
perulangan ke-0
perulangan ke-1
perulangan ke-2
perulangan ke-3
Selanjutnya kita akan melakukan percabangan:
- jika i sama dengan 0 atau 1, maka kita langsung jalan.
- Tapi kalau i lebih dari 1, baru kita akan melakukan penjumlahan.
Ubah kode program kita menjadi seperti ini:
for i in range(panjang):
if (i < 2):
print(i)
else:
index1 = i - 2
index2 = i - 1
print(f'Penjumlahan dari index-{index1} dan index-{index2}')
Jika dijalankan dengan output 5, kita akan mendapatkan output seperti berikut:
Masukkan panjang deret: 5
0
1
Penjumlahan dari index-0 dan index-1
Penjumlahan dari index-1 dan index-2
Penjumlahan dari index-2 dan index-3
Selanjutnya, kita hanya akan melanjutkan kode program pada bagian blok else
, karena di sana lah letak dari “fibonacci” yang sebenarnya.
Ubah kode program di atas menjadi seperti ini:
for i in range(panjang):
if (i < 2):
print(i)
else:
angkaSekarang = angka1 + angka2
print(angkaSekarang)
# update 2 variabel bantuan
angka1 = angka2
angka2 = angkaSekarang
Penjelasan
Sebenarnya tidak terlalu rumit, yang kita lakukan pada blok kode else
di atas adalah:
- menghitung
angkaSekarang
berdasarkan 2 variabel bantuanangka1
danangka2
. - mencetak
angkaSekarang
ke dalam layar. - lalu mengupdate dua variabel bantuan agar bisa digunakan untuk menghitung angka berikutnya.
Jalankan kode program di atas, inputkan angka 6 dan kita akan mendapatkan output seperti berikut:
Masukkan panjang deret: 6
0
1
1
2
3
5
Loh, kok hasilnya memanjang?
Agar bisa menghasilkan output dalam satu baris, kalian bisa mengganti bagian print
dengan menambahkan parameter end=' '
seperti berikut:
...
print(i, end=' ')
...
print(angkaSekarang, end=' ')
...
Output:
Masukkan panjang deret: 10
0 1 1 2 3 5 8 13 21 34
Nah, mudah kan?
Kesimpulan
Untuk menyelesaikan deret fibonacci, kita bisa menggunakan berbagai cara dan pendekatan. Pada part pertama ini kita telah mencoba 2 cara:
- Yang pertama menggunakan list
- dan yang kedua menggunakan variabel bantuan
Sangat mudah sekali, tidak terlalu rumit. Dan –sekali lagi– yang perlu kita pahami adalah: logika pemrograman itu tidak bersifat kaku dalam artian untuk masalah a caranya harus a, untuk masalah b alurnya harus b. Tidak demikian. Kita sebagai programmer bisa menggunakan cara kita sendiri yang mungkin berbeda dengan cara orang lain.
Oleh karena itu, jika kalian menemukan suatu masalah tertentu cobalah sekuat tenaga untuk memikirkan jalan keluarnya sendiri. Setelah berhasil mendapatkan solusi, barulah bertanya kepada rekan atau senior tentang permasalahan yang sama. Dari situ kalian bisa membandingkan antara logika kalian dan orang lain, yang pada akhirnya kita bisa semakin terlatih untuk memecahkan permasalahan pemrograman π
Kode Program Lengkap
Jika kalian kesulitan mengikuti pertemuan ini dan menemui banyak error, kalian bisa langsung melihat kode program lengkapnya pada repositori python-latihan-logika di github.
Jangan lupa kasih star ya!βπ
Selanjutnya: Pemecahan Fibonacci Menggunakan Rekursif
Jangan kemana-mana, karena insyaallah pada pertemuan selanjutnya kita akan mencoba memecahkan kasus fibonacci menggunakan fungsi rekursif.
Terima kasih banyak!