HASIL DAN PEMBAHASAN

3. HASIL DAN PEMBAHASAN

Pada bagian ini akan menjelaskan tentang konsep dan teknik pemprograman menggunakan metode rekursif dan memberikan beberapa ilustrasi untuk membantu berpikir secara rekursif.

3.1 Masalah Menghitung Faktorial

Banyak fungsi matematika yang didefenisikan menggunakan rekursi. Akan dimulai dari suatu contoh sederhana. Factorial suatu angka n dapat didefenisikan secara rekursif sebagai berikut:

Gambar 3.1 Hitung Faktorial.Java 0!=1;

n!=n x (n – 1)x…x 2x1 = n x (n – 1)!; n > 0

bagaimana kita mencari n! atas suatu n ᴤ untuk mencari 1! Mudah, karena kita mengetahui bahwa 0! Sama dengan 1, dan 1! adalah 1 x 0!. Bila diasumsikan bahwa kita mengetahui (n – 1)!, maka kita bisa mendapatkan n!, menggunakan n x (n – 1)!. Jadi masalah menghitung n! direduksi menjadi masalah menghitung (n – 1)!. Ketika menghitung (n – 1)!, kita dapat menerapkan ide yang sama secara rekursif samapai n direduksi menjadi 0.

Misalkan bahwa faktorial(n) merupakan metode untuk menghitung n!, jika kita memanggil metode tersebut dengan n = 0, maka metode tersebut dengan segera memberikan nilai balik. Metode tersebut tentunya dapat menyelesaikan kasus yang paling sederhana, yang dikenal dengan kasus basis atau kondisi penghenti. Jika kita memanggil metode

Gambar 3.2 Output Keluaran

KeTIK 2014

ISBN: 979-458-766-4

Konferensi Nasional Pengembangan Teknologi Informasi dan Komunikasi

Metode faktorial (baris 16 – 21) secara esensi

If (indeks == 0)

merupakan penterjemah atas defenisi matematik atas

Return 0;

faktorial menjadi kode java. Pemanggilan terhadap

Else if (indeks == 1)

faktorial bersifat rekursif karena memanggil dirinya

Return 1;

sendiri. Parameter yang dilewatkan kepada metode

Else

faktorial didekremen sampai dicapainya kasus basis. Return fib (indeks – 1) + fib (indeks – 2);

3.2 Masalah Menghitung Bilangan Fobonacci

Berikut adalah kode yang menyajikan suatu Pada pembahasan masalah menghitung faktorial

program utuh yang meminta pengguna untuk pada bagian yang tersebut diatas dapat dengan mudah

memasukan suatu indeks dan yang menghitung ditulis ulang tanpa menggunakan rekursi. Dalam

bilangan Fibonacci tersebut atas indeks tersebut. beberapa kasus, penggunaan rekursi dapat memampukan kita untuk menyajikan solusi yang efektif dan sederhana atas permasalahan yang sulit untuk diselesaikan. Dalam pembahasan ini kita akan menggambil suatu masalah menghitung bilangan Fibonacci, coba kita perhatikan deret Fibonacci pada bagian berikut ini:

Tabel 3.1 Deret Fibonacci Deret

0 1 1 2 3 5 8 13 21 34 35 89 … Indeks

Dalam deret Fibonacci dimulai dari 0 dan 1, dengan setiap subruntun angka merupakan penjumlahan dari dua angka sebelumnya. Runtun ini dapat secara rekursif didefenisikan sebagai berikut:

Gambar 3.3 Kode HitungFibonacci Fib (0) = 0;

Fib (1) = 1; Fib (indeks) = fib (indeks – 2) + fib (indeks – 1); indeks >= 2

Deret Fibonacci dinamai oleh Leonardo Fibonacci, seorang matematikawan abad pertengahan, yang mulai memodelkannya untuk menghitung pertumbuhan populasi kelinci. Deret ini dapat pula digunakan untuk optimalisasi numeric dan berbagai aplikasi lain.

Untuk mencari fib (indeks) atau suatu indeks yang diberikan, adalah mudah untuk menghitung fib (2), karena fib (1) dan fib (0) telah dikateahui. Diasumsikan bahwa kita telah mengetahui fib (indeks – 2) dan fib (indeks – 1), maka kita dapat menghitung fib (indeks) dengan mudah. Oleh karena itu, masalah menghitung fib (indeks) direduksi menjadi masalah

menghitung fib (indeks – 2) dan fib (indeks – 1). Gambar 3.4 Output Keluaran Ketika menerapkannya kita dapat melakukannya

dengan menerapkan ide rekursif sampai indeks

3.3 Masalah Menara Hanoi

direduksi menjadi 1 dan 0. Masalah menara Hanoi merupakan suatu Kasus basis adalah indeks = 0 atau indeks = 1.

masalah klasik yang dapat diselesaikan dengan Jika memanggil metode fib dengan indeks = 0 atau

mudah menggunakan rekursi, tetapi akan cukup sulit indeks = 1, maka akan menghasilkan nilai balik

diselesaikan bila tanpa rekursi.

dengan segara. Jika memanggil metode tersebut Mungkin contoh kasus pada masalah ini sudah dengan indeks >= 2, maka masalah akan menjadi dua

cukup banyak digambarkan dengan menggunakan submasalah untuk menghitung fib (indeks – 1) dan fib

berbagai metode, namun disini penulis ingin (indeks – 2) menggunakan pemanggilan rekursif.

menyegarkan kembali bagaimana kita dapat berpikir Algoritma rekursif untuk menghitung fib (indeks)

secara rekursif untuk menyajikan solusi efektif dan dapat dengan sederhana dideskripsikan sebagai sederhana terhadap masalah-masalah yang sulit dan berikut:

inheren untuk dicari pemecahan masalahnya.

ISBN: 979-458-766-4 KeTIK 2014 Konferensi Nasional Pengembangan Teknologi Informasi dan Komunikasi

Pada masalah menara Honoi ini akan melibatkan Pada metode berikut memindahkan n disk dari aksi untuk memindahkan disk tertentu dengan menara ke menara dengan bantuan menara: berbagai ukuran dari satu menara ke menara lain

void pindahDisk (int n, char dariMenara, char dengan mengikuti beberapa aturan sebagai berikut:

keMenara, char bantuanMenara)

1. Terdapat n buah disk berlabel 1 2 3, …,n dan tiga menera berlebel A, B, dan C.

Algoritma untuk metode ini dapat dideskripsikan

2. Tidak ada disk yang berada di suatu disk lebih

sebagai berikut:

kecil pada sembarang waktu. if (n == 1) // Kondisi penghenti

3. Semua disk awalnya ditempatkan pada menara A. Memindahkan disk 1 dari dariMenara ke

4. Hanya satu disk yang boleh digerakan atau

keMenara;

dipindahkan pada suatu waktu, dan disk tersebut

else {

harus berada di atas suatu menara. pindahDisk (n –

1, dariMenara, bantuanMenara, keMenara);

Tujuan dari tantangan masalah ini adalah untuk Memindahkan n disk dari dariMenara ke memindahkan semua disk dari menara A ke menara B

keMenara;

dengan bantuan menara C. Sebagai contoh jika anda pindahDisk (n – 1, bantuanMenara, memiliki tiga disk, maka beberapa langkah yang

keMenara, dariMenara);

dibutuhkan untuk memindahkan semua disk dari

menara A ke menara B akan ditampilkan pada

gambar 3.5 berikut ini: Berikut adalah menyajikan suatu contoh yang meminta pengguna untuk memasukan sejumlah disk dan yang memanggil metode rekursif pindahDisk untuk menampilkan solusi dalam memindahkan disk- disk yang diberikan.

Gambar 3.5 Tantangan Menara Hanoi (Sumber:

Gambar 3.6 MenaraHanoi.java R.H. Sianipar, ST,M.T, M.Eng, Ph.D, 2013)

Pada kasus tiga disk, kita dapat menemukan solusi secara manual. Untuk jumlah disk yang lebih besar, bahkan bila hanya empat disk, masalah menjadi cukup kompleks.

Kasus basis untuk masalah ini adalah n = 1. Jika n == 1, maka kita hanya perlu memindahkan disk A ke B. Jika n > 1, maka kita perlu memecahkan masalah awal menjadi tiga submasalah dan menyelesaikan secara skuensial.

1. Memindahkan n – 1 disk pertama dari A ke C dengan bantuan menara B.

2. Memindahkan n disk dari A ke B.

3. Memindahkan n – 1 disk dari C ke B dengan bantuan menara A Gambar 3.7 Output Keluaran

KeTIK 2014

ISBN: 979-458-766-4

Konferensi Nasional Pengembangan Teknologi Informasi dan Komunikasi

terlihat pada gambar 3.9. Seperti yang kita lihat, menuli program lebih mudah daripada menjejak pemanggilan rekursif.

Sistem menggunakan tumpukan untuk menjajak beberapa pemanggilan di balik layar. Pada beberapa kasus, rekursi memberikan suatu level abstraksi yang memyembunyikan iterasi dan beberapa detail lain dari pengguna.