T0616 ALGORITMA DAN PEMROGRAMAN (10) SUBANDIJO UNIVERSITAS BINA NUSANTARA FAKULTAS ILMU KOMPUTER JAKARTA, 2005 7/11/2017 T0616 - Algoritma dan Pemrograman 1 FUNGSI REKURSI (1) • FUNGSI REKURSI ADALAH FUNGSI YANG FUNCTION BODY-NYA MEMUAT PERNYATAAN YANG MEMANGGIL DIRINYA SENDIRI. • FUNGSI REKURSI BERMANFAAT UNTUK PEMECAHAN MASALAH JIKA MASALAH TERSEBUT DAPAT DIDEFINISIKAN SECARA REKURSI. • IDE DASAR REKURSI ADALAH INDUKSI MATEMATIKA. 7/11/2017 T0616 - Algoritma dan Pemrograman 2 FUNGSI REKURSI (2) • CONTOH: • N!, DIBACA N FAKTORIAL, DIDEFINISIKAN SEBAGAI BERIKUT: N!=1 N ! = N * (N-1) ! 7/11/2017 UNTUK N = 0 UNTUK N > 0. T0616 - Algoritma dan Pemrograman 3 TRACING FUNGSI REKURSI 5! (5 * 4!) (5 * (4 *3!)) (5 * (4 * (3 * 2!))) (5 * (4 * (3 * (2 * 1!)))) (5 * (4 * (3 * (2 * (1 * 0!))))) (5 * (4 * (3 * (2 * (1 * 1))))) (5 * (4 * (3 * (2 * 1)))) (5 * (4 * (3 * 2))) (5 * (4 * 6 )) (5 * 24) 120 7/11/2017 T0616 - Algoritma dan Pemrograman 4 KOMPONEN FUNGSI REKURSI • FUNGSI REKURSI MEMPUNYAI DUA KOMPONEN YAITU: • BASE CASE: MENGEMBALIKAN NILAI TANPA MELAKUKAN PEMANGGILAN REKURSI BERIKUTNYA. • REDUCTION STEP: MENGHUBUNGKAN FUNGSI DI SUATU NILAI INPUT KE FUNGSI YANG DIEVALUASI DI NILAI INPUT YANG LAIN. SEKUEN NILAI INPUT HARUS KONVERGEN KE BASE CASE. • FUNGSI FAKTORIAL • BASE CASE : N = 0 • REDUCTION STEP: F(N) = N * F(N-1) 7/11/2017 T0616 - Algoritma dan Pemrograman 5 REKURSI ALGORITMA E(UCLIDEAN) • ALGORITMA E(UCLIDEAN) SUDAH BERUMUR LEBIH DARI 2000 TAHUN DAN MERUPAKAN SALAH SATU ALGORITMA MODERN YANG PALING TUA. int gcd (int m, int n) { if(m==0) return m; return gcd(n, m % n); } 7/11/2017 T0616 - Algoritma dan Pemrograman 6 REKURSI VS ITERASI • FAKTORIAL MENGGUNAKAN REKURSI long faktor(int n) { if(n==0) return (1); else return(n * faktor(n-1)); } Mengapa faktor() bertipe long ? 7/11/2017 • FAKTORIAL MENGGUNAKAN ITERASI long faktor(int n) { long i, fak = 1; for(i=1; i<=n; i++) fak *= i; return (fak); } Mengapa nilai awal fak = 1? T0616 - Algoritma dan Pemrograman 7 KEKURANGAN FUNGSI REKURSI • MESKIPUN PROGRAM REKURSI BISA LEBIH PENDEK TETAPI FUNGSI REKURSI MEMBUTUHKAN: – MEMORI YANG LEBIH BESAR KARENA PERLU MEMORI EKSTRA UNTUK ACTIVATION RECORD STACK. – WAKTU LEBIH LAMA KARENA PERLU MENJEJAKI SETIAP PEMANGGILAN REKURSI MELALUI ACTIVATION RECORD STACK. 7/11/2017 T0616 - Algoritma dan Pemrograman 8 KAPAN MENGGUNAKAN FUNGSI REKURSI • SECARA UMUM GUNAKAN PENYELESAIAN SECARA REKURSI JIKA: • PENYELESAIAN SULIT DILAKUKAN SECARA ITERASI. • EFISIENSI SECARA REKURSI SUDAH MEMADAI. • EFISIENSI BUKAN MASALAH DIBANDINGKAN DENGAN KEJELASAN PROGRAM. • PEMBOROSAN (REDUNDANCY) MEMORI DAPAT TERJADI DALAM PENYELESAIAN MASALAH SECARA REKURSI. 7/11/2017 T0616 - Algoritma dan Pemrograman 9 BILANGAN FIBONACCI • SEKUEN BILANGAN 0, 1, 1, 2, 3, 5, 8, 13, 21,34, 55, 89, 134, … DISEBUT BILANGAN FIBONACCI. HUBUNGAN ANTARA SATU SUKU DENGAN SUKU BERIKUTNYA DIDEFINISIKAN SECARA REKURSI SBB: FIB(N) = N JIKA N = 0 ATAU 1 FIB(N) = FIB(N-2) + FIB(N-1) JIKA N >= 2. D 7/11/2017 T0616 - Algoritma dan Pemrograman 10 BILANGAN FIBONACCI int Fib(int n) { int f; if(n==0) f = 0; else if(n==1) f = 1; else f = Fib(n-2) + Fib(n-1); return f; } 7/11/2017 T0616 - Algoritma dan Pemrograman FUNGSI FIB() DISAMPING DITULIS SECARA REKURSI DAN DISEBUT SEBAGAI SLOW_FIB() TULISLAH FAST_FIB() MENGGUNAKAN ITERASI. 11 PEMBOROSAN MEMORI UNTUK N=4 FIB (4) FIB (3) FIB (2) FIB (1) 7/11/2017 FIB (2) FIB (1) FIB (1) FIB (0) FIB (0) T0616 - Algoritma dan Pemrograman 12 MENARA HANOI (1) • MEMINDAHKAN N PIRINGAN DARI PILAR KIRI KE KANAN DENGAN PILAR TENGAH SEBAGAI ANTARA. PIRINGAN DI SEBELAH KIRI TERSUSUN SEDEMIKIAN RUPA SEHINGGA MENYERUPAI MENARA YAITU PIRINGAN YANG LEBIH KECIL BERADA DI ATAS PIRINGAN YANG LEBIH BESAR. SELAMA PROSES PEMINDAHAN POLA SUSUNAN MENARA HARUS SELALU DIJAGA. 7/11/2017 T0616 - Algoritma dan Pemrograman 13 MENARA HANOI (2) • RULE: • PINDAHKAN PIRINGAN SATU PER SATU. • SUATU PIRINGAN TIDAK BOLEH BERADA DI ATAS PIRINGAN YANG LEBIH KECIL. 7/11/2017 T0616 - Algoritma dan Pemrograman 14 MENARA HANOI (3) • ALGORITMA DENGAN TEKNIK WORKING BACKWARD. • PINDAHKAN (N-1) PIRINGAN ATAS KE PILAR ANTARA. • PINDAHKAN PIRINGAN TERAKHIR KE PILAR TUJUAN. • ULANGI LANGKAH 1 DAN 2 HINGGA SELESAI. • DISEBUT TEKNIK WORKING BACKWARD KARENA PROSES BERJALAN MUNDUR YAITU: • UNTUK MEMINDAHKAN N PIRINGAN, PIKIRKAN DULU CARA MEMINDAHKAN (N-1) PIRINGAN. • ULANGI LANGKAH DI ATAS UNTUK (N-1), (N-2) … • PINDAHKAN SATU PIRINGAN YAITU PIRINGAN TERAKHIR. 7/11/2017 T0616 - Algoritma dan Pemrograman 15 MENARA HANOI (4) menHanoi(int n, char awal, char akhir, char antara) { if(n==1) printf(“Pindahkan 1 dari %c ke %c\n”, awal, akhir); else { menHanoi(n-1, awal, antara, akhir); printf(“Pindahkan %d dari %c ke %c\n”, n, awal, akhir); TULIS FUNGmenHanoi(n-1, antara, akhir, awal); SI MAIN()} NYA. } 7/11/2017 T0616 - Algoritma dan Pemrograman 16 MENARA HANOI (3) 7/11/2017 T0616 - Algoritma dan Pemrograman 17 THE END “...ALL YOU NEED IS LOVE…” 7/11/2017 T0616 - Algoritma dan Pemrograman 18
© Copyright 2024 Paperzz