Perbandingan Teknik Rekursif dan Teknik Iteratif
10.3. Perbandingan Teknik Rekursif dan Teknik Iteratif
Teknik Iteratif lebih mudah kurang(-), bagi(/), kali(*), kadangkala dimengerti karena jelas tinggal juga pangkat atau yang lainnya mengurutkan angka-angkanya dari 1
namun dapat dikembalikan ke empat atau mungkin 0 sampai dengan n. operasi dasar pertama. Kerugian Operasi yang terjadi bisa tambah(+),
yang pertama teknik ini
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Rekursif
membutuhkan memori yang banyak harus repot‐repot menggunakan terutama untuk bilangan yang besar.
rekursif? Memang benar bahwa Yang kedua proses iterasi bisa semua fungsi rekursif dapat dibuat membutuhkan waktu yang lama versi iterasinya. Namun demikian, apabila bilangannya besar.
ada beberapa masalah yang jauh
Sedang Teknik Rekursif harus lebih mudah jika dipecahkan dengan tahu formulanya dahulu, dalam hal ini
rekursif. Kode program untuk mana base step-nya, dan mana beberapa masalah rekursif juga relatif rekursif step-nya. Biasa dipakai oleh
lebih mudah dipahami dibandingkan pemrogram yang sudah agak lanjut versi iterasinya. Berikut adalah versi dan operasi matematikanya iteratif dari fungsi pangkat. merupakan operator biasa. Namun Sekaranng perhatikan pada aplikasi memori yang digunakan bukan permainan menara Hanoi di bawah memori langsung penampung ini variable namun merupakan stack.
Menara Hanoi ialah salah satu Jadi banyak sedikitnya penghitungan
permainan yang dulunya dimainkan tergantung dari besarnya kapasitas oleh seorang pendeta di Hanoi. stack yang dipunyai komputer. Tujuan permainan ini ialah Secara rata-rata proses memindahkan n buah pringan dari panghitungan dengan rekursif akan tonggak asal (A) melalui tonggak lebih cepat karena kompleksitasnya bantu (B) menuju tonggak tujuan (C). lebih kecil dibanding dengan iteratif.
Dengan aturan–aturan bahwa Kadang seseorang bertanya, loh
piringan yang lebih kecil tidak boleh saya kan juga bisa membuat fungsi berada di bawah piringan yang lebih pangkat di atas dengan besar. menggunakan teknik iteratif. Misalnya menggunakan while loop. Kenapa
Menara A B C :
Gambar 10.3. Menara dengan Tiga Piringan
Direktorat Pembinaan SMK | 2008
Rekursif Bahasa Pemrorgraman
Seperti biasa untuk memecahkan sampai (n-1) tersebut dari tonggak masalah kita daftarkan dulu langkah-
bantu (B) ke tonggak tujuan (C). langkah yang diambil mulai n = 1.
bagaimana caranya Dengan dfinisi piringan yang paling membawa piringan ke 1 sampai (N-1) atas ialah piringan 1.
Nah
dari tonggak asal ke tonggak bantu (B), caranya sama saja yaitu dengan
Untuk n = 1 : memindahkan piringan ke (n-1) dari
Pindahkan piringan 1 dari A ke C tonggak asal (A) ke tonggak tujuan Untuk n = 2 :
yang pada saat ini berada pada
Pindahkan piringan 1 dari A ke B tonggak (B) sedangkan piringan dari
1 sampai ke (N-2) dipindahkan ke
Pindahkan piringan 2 dari A ke C
Pindahkan piringan 3 dari B ke C tonggak bantu yang saat ini berada di tonggak (C) , Setelah piringan ke 1
Dari contoh diatas dapat diambil sampai (N-2) berada pada tonggak kesimpulan , untuk memindahkan N bantu (C), kemudian pindahkan
piringan dari tonggak asal (A) ke piringan ke 1 sampai (N-2) ke tonggak tujuan (C) maka piringan ke
tonggak tujuan (B) dan seterusnya. N harus berada di tonggak tujuan (C),
Metode penyelesaian permainan sedangkan piringan ke 1 sampai (N -
Hanoi di atas sering disebut sebagai
1) harus berada di tonggak bantu (B). metode back tracking, jadi solusi Setelah piringan ke 1 sampai (N-1) dicari dengan cara mundur ke
berada pada tonggak bantu (B), belakang dahulu, baru kemudian kemudian pindahkan piringan ke 1 solusi bisa ditemukan. Berikut Listing
program Menara Hanoi dalam bahasa C
Program 10.2 include <stdio.h>
void Hanoi(int n,char asal,char bantu, char tujuan) // pindahkan piringan ke n { // dari asal menuju tujuan // melalui bantu
if (n == 0 ) return; Hanoi(n ‐ 1 ,asal,tujuan,bantu); // pindahkan piringan ke n‐1 // dari asal ke bantu melalui // tonggak tujuan
printf( "Pindah piring ke %d ke dari %c ke %c\n" ,n,asal,tujuan); Hanoi(n ‐ 1 ,bantu,asal,tujuan) // pindahkan piringan ke n ‐ 1
// dari bantu menuju tujuan // melalu asal
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Rekursif
int main(void) {
int n; printf( "Jumlah piringan ? " ); scanf( "%d" ,&n); Hanoi(n,'a','b','c');
return 0 ; }