Rekursi ALPROG II Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 1
Pengenalan Rekursi Proses dari suatu subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri. Contoh : Procedure rekursi; Begin Write (‘Akademi Teknik Kupang’); Rekursi; End; {program utama} Begin Rekursi; End. Saat program ini dijalankan akan menampilkan tulisan “Akademi Teknik Kupang” terus menerus tanpa berhenti. Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 2
Kondisi Pengakhiran rekursi Untuk menghentikan rekursi bisa dengan menggunakan kondisi seleksi atau if then,, Rekursi akan berhenti bila kondisi telah memenuhi syarat. Contoh : Rekursi akan dilakukan sebanyak 5 kali, yaitu dengan menyeleksi kondisi dari variabel akhir sampai bernilai 5. misalnya : Var akhir : word; Procedure rekursi; Begin if Akhir < 5 Then Begin write (‘Akademi Teknik Kupang’); Akhir := Akhir +1; Rekursi; end; {program utama} Begin Akhir := 0 Rekursi; End. Program akan menampilan “Akademi Teknik Kupang” sebanyak 5 kali Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 3
Latihan Buatlah program dengan rekursi untuk menampilkan bilangan dari 1 sampai 10? Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 4
Faktorial 1! = 1 2! = 1 x 2 3! = 1x 2 x 3 4! = 1 x 2 x 3 x 4 Dst….. Kalo diasumsikan N lebih besar 3 maka dapat dirumuskan : N! = N x (N-1) x (N-2) x …. x 1 Rumus tsb dapat didefinisikan secara rekursi : N ! = N x (N-1)! Mis : 5! = 5 * 4! 5! = 5 * 4 * 3! 5! = 5 * 4 * 3 * 2! 5! = 5 * 4 * 3 * 2 * 1 = 120 Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 5
Procedure Faktorial Procedure faktorial(N : byte; Var Hasil : Longint) Begin If N <= 1 Then Hasil := 1; else Begin faktorial(N-1, Hasil); hasil := N * Hasil; End; {program utama} Var N : byte; F : longint; Begin write (‘ Berapa faktorial = ‘); readLn (N); Faktorial(N,F); writeln (‘Faktorial = ‘, F); End; Prosedur by reference, Ingat-ingat kembali sifat dari prosedur by reference Memanggil prosedurnya sendiri coba ubah procedure faktorial diatas dalam bentuk fungsi! Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 6
Menara Hanoi Permasalahan yang paling terkenal dalam proses rekursi adalah menara hanoi (The Tower of Hanoi). Memindahkan sejumlah piringan dari satu menara ke menara yang lain. Pemindahan piringan dilakukan satu demi satu dan tidak boleh piringan yang lebih kecil berada di bawah piringan yang lebih besar. Untuk keperluan ini disediakan sebuah menara lagi untuk bantuan pemindahan. Gambar Menara Hanoi : A B C Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 7
A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C 8
A B C A B C A B C A B C A B C A B C A B C Langkah 1 : pindahkan piring 1 dari A ke B Langkah 2 : pindahkan piring 2 dari A ke C Langkah 3: pindahkan piring 1 dari B ke C Langkah 4 : pindahkan piring 3 dari A ke B Langkah 5: pindahkan piring 1 dari C ke A Langkah 6: pindahkan piring 2 dari C ke B Langkah 7: pindahkan piring 1 dari A ke B Langkah 8: pindahkan piring 4 dari A ke C Langkah 9: pindahkan piring 1 dari B ke C Langkah 10: pindahkan piring 2 dari B ke A Langkah 11: pindahkan piring 1 dari C ke A Langkah 12: pindahkan piring 3 dari B ke C Langkah 13: pindahkan piring 1 dari A ke B Langkah 14: pindahkan piring 2 dari A ke C Langkah 15: pindahkan piring 1 dari B ke C Coba implementasikan algoritma diatas dalam bentuk procedure! Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 9
Kelemahan Rekursi Dalam beberapa kasus tertentu, rekursi dapat mempunyai kelemahan, yaitu suatu proses yang sudah dilakukan akan diproses ulang kembali, shingga membuat proses menjadi lama. Gerlan A. Manu, ST.,MKom - Algoritma & Pemrograman II 10