PERTEMUAN11 REKURSIF

FEMI D.A., S.Kom.



Rekursif
• Dapat digunakan ketika inti dari masalah terjadi
berulang kali
• Sedikit lebih efisien dari iterasi tapi lebih elegan
• Method-methodnya dimungkinkan untuk
memanggil dirinya sendiri
• Data yang berada dalam method tersebut
seperti argument disimpan sementara sampai
method pemanggilnya diselesaikan



Iterasi
• Dapat digunakan pada struktur kontrol pengulangan
• Proses diakhiri ketika kondisi loop gagal dilaksanakan
• Lebih cepat




Rekursif
• Memanggil suatu method secara berulang-ulang
• Menggambarkan sebuah masalah kedalam lingkup yang
lebih kecil dari pengulangan itu sendiri
• proses yang berakhir dengan kondisi tertentu disebut
permasalahan dasar yang telah tercukupi oleh suatu
pembatasan kondisi
• Mendorong proses pelatihan pemrograman yang baik



Method yang memanggil dirinya
sendiri
• f(0) = 0; f(x) = 2 f(x-1) + x2
• f(1) = 1; f(2) = 6; f(3) = 21; f(4) = 58
• fib(n) = fib(n - 1) + fib(n - 2)
public
public static

static int
int ff (int
(int x)
x)
{{
if
if (x
(x ==
== 0)
0) return
return 0;
0;
return
return 22 ** ff (x
(x -- 1)
1) ++ xx ** x;
x;
}}

• Memangkatkan bilangan real tak nol dengan suatu


pangkat bilangan bulat
1. public

static double pangkatRekursif (double x,

int n)
2. {
3.
if (n == 0) {
4.
return 1.0;
5.
} else if (n > 0) {
6.
return (x * pangkatRekursif (x, n - 1));
7.
} else {
8.
return (1 / pangkatRekursif (x, -n));

9.
}
10.}

0.0625

16.0
pangkatRekursif (4.0, 2)
return (4.0 * pangkatRekursif (4.0, 1));
4.0
pangkatRekursif (4.0, 1)
return (4.0 * pangkatRekursif (4.0, 0));
1.0
pangkatRekursif (4.0, 0)
return 1.0;

Returning values

Recursive calls


pangkatRekursif (4.0, -2)
return (1 / pangkatRekursif (4.0, 2));







Ciri masalah yang dapat diselesaikan secara rekursif
adalah masalah itu dapat di-reduksi menjadi satu atau
lebih masalah-masalah serupa yang lebih kecil
Secara umum, algoritme rekursif selalu mengandung dua
macam kasus:
• kasus induksi: satu atau lebih kasus yang pemecahan
masalahnya dilakukan dengan menyelesaikan masalah
serupa yang lebih sederhana (yaitu menggunakan
recursive calls)
• kasus dasar atau kasus penyetop (base case): satu
atau lebih kasus yang sudah sederhana sehingga

pemecahan masalahnya tidak perlu lagi menggunakan
recursive-calls.
Supaya tidak terjadi rekursi yang tak berhingga, setiap
langkah rekursif haruslah mengarah ke kasus penyetop
(base case).

public class RekursifPangkat{
2.
public static void main (String args[]){
3.
RekursifPangkat p = new RekursifPangkat();
4.
System.out.print("3 pangkat 6 = ");
5.
System.out.print(p.HitungPangkat(3,6));
6.
}
7.
public int HitungPangkat(int x, int y){
8.

if(y==1){
9.
return x;
10.
}
11.
else {
12.
return x * HitungPangkat(x,y-1);
13.
}
14.
}
15. }
1.



Definisi Rekursif :
• factorial(n) = factorial(n-1) * n, n adalah


suatu integer yang bernilai positif
• factorial(1) = 1


Contoh:
• factorial(2) = factorial(1)*2 = 2
• factorial(3) = factorial(2)*3 = 2*3 = 6.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

12.
13.

class FactorialIter {
static int factorial(int n) {
int result = 1;
for (int i = n; i > 1; i--) {
result *= i;
}
return result;
}
public static void main(String args[])
{
System.out.println(factorial(3));
}
}

class FactorialRecur {
2.
static int factorial(int n) {

3.
if (n == 1) {
4.
return 1;
5.
}
6.
return factorial(n-1)*n;
7.
}
8.
public static void main(String args[]) {
9.
System.out.println(factorial(3));
10.
}
11.}
1.

1.

2.
3.
4.
5.
6.
7.
8.
9.
10.

public class RekursifFibonacci{
public static void main (String args[]){
RekursifFibonacci f = new
RekursifFibonacci();
System.out.println("Deret Fibonacci : ");
for (int i=0;i