Pertemuan 1 Rekursi jual [Valdo] Lunatik Chubby Stylus
Fungsi Rekursif Definisi fungsi rekursif. Contoh 1 : Triangle Contoh 2 : Faktorial Contoh 3 : Perkalian Contoh 4 : Fibonacci Contoh 5 : Tower of Hanoi
Fungsi Rekursif Fungsi biasa dipanggil oleh fungsi lain. Sedangkan fungsi rekursif dipanggil oleh dirinya sendiri. A B C D A A A A
Triangel number : 1, 3, 6, 10, 15, 21, … Ada yang tahu lanjutannya ?
Fungsi Rekursif Setara dengan proses looping/ iterasi faktorial, perkalian Kadang rekursif lebih baik dari iterasi tower of hanoi Terkadang sebaliknya fibonacci Komponen : Way out if – else + return() Recursive call dengan value baru
Ciri khas rekursif Fungsi rekursif memanggil dirinya sendiri Ketika memanggil dirinya sendiri, fungsi tersebut akan memecahkan masalah yang lebih kecil Ada satu kondisi yang tidak membuat fungsi rekursif tidak memanggil dirinya sendiri
Simple Example public class rekursi { static void rekursi( ) { System.out.println("ini rekursif"); rekursi( ); //RECURSIVE CALL } public static void main(String[] args) { rekursi( );
Triangle Triangel number : 1, 3, 6, 10, 15, 21, … Ada yang tahu lanjutannya ?
Algoritma triangle n=1 1 = 1 n=2 3 = 2+1 n=3 6 = 3+2+1 dst
Gambar triangle
Triangle dengan iterasi int triangle(int n) { int total = 0; while(n > 0) // until n is 1 total = total + n; // add n (column height) to total --n; // decrement column height } return total;
Triangle dengan rekursi Triangle bisa diselesaikan dengan menjumlahkan n dengan total sisa sebelah kanan n
return(n+sumRemainingColumns(n)); //(incomplete } int triangle(int n) { return(n+sumRemainingColumns(n)); //(incomplete version) } int triangle(int n) { return(n+sumAllColumns(n-1));// (incomplete version) }
int triangle(int n) { return( n + triangle(n-1) ); // (incomplete version) } int triangle(int n) { if(n == 1) return 1 return( n + triangle(n-1) ); // (incomplete version) }
Source code int triangle(int n) { } int x,y; if( n == 1 ) return ( 1 ); x = n – 1; y = triangle( x ); return ( n + y ); }
Latihan tracing rekursi
Faktorial ALGORITMA n! = 1 if n == 0 n! = n * ( n – 1 )! if n > 0 4! = 4 x 3! 3! = 3 x 2! 2! = 2 x 1! 1! = 1 x 0! 0! = 1 SOURCE CODE int factorial ( int n ) { int x, y; if ( n == 0 ) return ( 1 ); x = n – 1; y = factorial ( x ); return ( n * y ); }
Latihan tracing rekursi
Perkalian ALGORITMA a * b = a if b == 1 a * b = a * ( b – 1 ) + a if b > 1 6 x 3 = ( 6 x 2 ) + 6 = ( 6 x 1 ) + 6 + 6 = 6 + 6 + 6 = 18 SOURCE CODE int mult ( int x, int y ) { int a,b,sum; if(y==1) return (x); a = y-1; b = multiple(x,a); sum = x + b; return (sum); }
Latihan tracing rekursi
resume Kelebihan : Kekurangan : Program menjadi lebih singkat/sederhana Dalam beberapa kasus kasus memang dibutuhkan penggunaan rekursi Kekurangan : Kurang efektif dalam hal kecepatan Membutuhkah memori lebih, karena ketika satu fungsi / method memanggil dirinya , dibutuhkan tambahan alokasi memori. Sehingga alokasi memori total menjadi lebih besar
SOURCE CODE multiple int factorial ( int n ) { int x, y; if ( n == 0 ) SOURCE CODE TRIANGLE Int triangle(int n) { int x,y; if( n == 1 ) return ( 1 ); x = n – 1; y = triangle( x ); return ( n + y ); } SOURCE CODE multiple int multiple( int x, int y ) { int a,b,sum; if(y==1) return (x); a = y-1; b = multiple(x,a); sum = x + b; return (sum); } SOURCE CODE FACTORIAL int factorial ( int n ) { int x, y; if ( n == 0 ) return ( 1 ); x = n – 1; y = factorial ( x ); return ( n * y ); }