LOGIKA DAN ALGORITMA - PERTEMUAN 8 - REKURSI
Pengantar Rekursi adalah proses dimana sebuah subprogram yang memanggil dirinya sendiri. Rekursif menyelesaikan masalah dengan menggunakan konsep tumpukan. Adapun syarat suatu subprogram dapat disebut subprogram rekursi : Subprogram itu memanggil dirinya sendiri. Terdapat anchor (kondisi dimana fungsi rekursi selesai) untuk menghentikan proses rekursi. Namun, penggunaan rekursi tidak dianjurkan, karena lebih banyak menggunakan sumber daya memori saat program dijalankan.
Contoh Rekursi (1) n! = n*(n-1)! , jika n>1 Faktorial Fungsi faktorial dari bilangan bulat positif n didefinisikan sbb : n! = n*(n-1)! , jika n>1 n! = 1 , jika n = 0, n=1
Fungsi Menghitung Faktorial Function Faktorial (input integer) integer Deklarasi {tidak ada} Deskripsi If (n = 0) or (n = 1) then Return(1) Else Return(n*Faktorial(n-1)) Endif Jika n diinputkan oleh dengan angka 5, bagaimana hasilnya ? N = 5 : nilai kembalian 5*faktorial(4) N = 4 : nilai kembalian 4*faktorial(3) N = 3 : nilai kembalian 3*faktorial(2) N = 2 : nilai kembalian 2*faktorial(1) N = 1 : nilai kembalian 1 Hasil : 120
Kondisi tumpukan rekursi faktorial Di dalam memori komputer saat rekursi ini dieksekusi akan membentuk stack (tumpukan). N Faktorial N=1 1 N=2 2 * Faktorial(1) N=3 3 * Faktorial(2) N=4 4 * Faktorial(3) N=5 5 * Faktorial(4)
Bagan pemanggilan modul rekursi Instruksi 1 Instruksi 2 Call Modul 1 End Modul 1 Instruksi 1 Instruksi 2 Call Modul 1 End Modul 1 Instruksi 1 Instruksi 2 Call Modul 1 End Modul 1 Instruksi 1 Instruksi 2 Call Modul 1 End Modul 1 Instruksi 1 Instruksi 2 ……… End Modul 1 N=5 N=4 N=3 N=2 N=1
Contoh Rekursif(2) Procedure rekursi (input n:integer) Deklarasi {tidak ada} Deskripsi Write(n) If(n<5) then Rekursi(n+1) End if Jika n diinputkan oleh user dengan angka 1, bagaimana hasilnya ? N = 1 : Cetak 1 (1<5) rekursi(1+1)=2 N = 2 : Cetak 2 (2<5) rekursi(2+1)=3 N = 3 : Cetak 3 (3<5) rekursi(3+1)=4 N = 4 : Cetak 4 (4<5) rekursi(4+1)=5 N = 5 : Cetak 5 (5<5) SALAH STOP Hasil : 1, 2, 3, 4, 5
Contoh Rekursif(3) Procedure rekursi (input n:integer) Deklarasi {tidak ada} Deskripsi If(n<5) then Write(n) Rekursi(n+1) End if Jika n diinputkan oleh user dengan angka 1, bagaimana hasilnya ? N=1 (1<5) Cetak 1 rekursi(1+1)=2 N=2 (2<5) Cetak 2 rekursi(2+1)=3 N=3 (3<5) Cetak 3 rekursi(3+1)=4 N=4 (4<5) Cetak 4 rekursi(4+1)=5 N=5 (5<5) SALAH STOP Hasil : 1,2,3,4
Contoh Rekursif (4) Procedure rekursi (input n:integer) Deklarasi {tidak ada} Deskripsi If(n<5) then Rekursi(n+1) End if Write(n) Jika n diinputkan oleh user dengan angka 1, bagaimana hasilnya ? N=1 (1<5) rekursi(1+1)=2 N=2 (2<5) rekursi(2+1)=3 N=3 (3<5) rekursi(3+1)=4 N=4 (4<5) rekursi(4+1)=5 N=5 (5<5) SALAH STOP Cetak 5 Cetak 4 Cetak 3 Cetak 2 Cetak 1 Hasil : 5, 4, 3, 2, 1 (Ingat Konsep Stack !!)
LATIHAN 8 Dengan menggunakan rekursif, tampilkan deret fibonacci sebagai berikut : Input = 10 Output = 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 Output = 55, 34, 21, 13, 8, 5, 3, 2, 1, 1