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 ; }