Anda di halaman 1dari 5

Fungsi Rekursif

Algoritma dan Pemrograman


Tahar Agastani
Teknik Informatika UIN - 2008

Konsep Rekursi
Kebanyakan orang secara alamiah tidak
berfikir secara rekursif.
Contoh:
Faktorial dari bilangan integer non-negatif n, akan
dipecahkan sbg: n! = n * (n-1) * (n-2) * ... * 2 * 1
Factorial (4) = 4! = 4 * 3 * 2 * 1 = 4 * 3!
Factorial (3) = 3! = 3 * 2 * 1 = 3 * 2!
Factorial (2) = 2! = 2 * 1 = 2 * 1!
Factorial (1) = 1! = 1 = 1 * 0!
Factorial (0) = 0! = 1 // definisi khusus

Definisi rekursif sebuah fungsi:


Fungsi yang didalamnya menggunakan fungsi tsb.

1
Definisi rekursif untuk fungsi faktorial:
1, n=0 // kondisi penghentian
n!=
n * (n -1)!, n > 0 // langkah rekursif

Suatu algoritma didefinisikan secara


rekursif jika definisinya memiliki:
Satu atau lebih kondisi penghentian yang bisa
dievaluasi untuk parameter-parameter
tertentu.
Langkah rekursif dimana nilai sekarang dalam
algoritma bisa didefinisikan dalam nilai
sebelumnya. Langkah rekursif harus menuju
ke kondisi penghentian.

Iteratif vs Rekursif
Versi Iteratif Fungsi Faktorial:
Faktorial:
long Factorial(long n)
{
int prod = 1, i;

// untuk n == 0 return prod = 1; jika tidak


// hitung prod = 1*2**n
if (n > 0)
for (i = 1; i <= n; i++)
prod *= i;
return prod;
}

2
Iteratif vs Rekursif
Versi Rekursif Fungsi Faktorial:
long Factorial(long n)
{
// kondisi penghentian adalah n == 0
if (n == 0)
return 1;
else
// langkah rekursif
return n * Factorial(n - 1);
}

Urutan Pemanggilan Fungsi


Contoh:
Menghitung Factorial(4)
Parameter Action Return
0 Compute: 0! = 1 1
0 1

Parameter Action Return


1 Compute: 1*Factorial(0) 1
1 1

Parameter Action Return


2 Compute: 2*Factorial(1) 2
Parameters Values
Passed 2 2 Returned
Parameter Action Return
3 Compute: 3*Factorial(2) 6
3 6

Parameter Action Return


4 Compute: 4*Factorial(3) 24
4 24

Main

3
Pertimbangan Penggunaan
Rekursi
Meskipun penulisan program dengan cara rekursif bisa
lebih pendek, namun prosedur atau fungsi rekursif
memerlukan :
Memori yang lebih banyak, karena perlu tambahan untuk
Activation Record Stack.
Stack.
Waktu lebih lama, karena perlu menjejaki setiap pemanggilan
rekursif melalui Activation
Activation Record.
Record.
Secara umum,
umum, gunakan penyelesaian secara rekursif,
rekursif,
hanya jika :
Penyelesaian sulit dilaksanakan secara iteratif
Efisiensi dengan cara rekursif sudah memadai
Efisiensi bukan masalah dibandingkan dengan kejelasan logika
program
Pemborosan (Redundancy) dapat terjadi dalam
penyelesaian masalah secara rekursif.

Contoh Klasik (Bilangan Fibonacci)


Fib(n) = n, bila n = 0 atau n = 1
Fib(n) = Fib(n- Fib(n-1), bila n 2
Fib(n-2) + Fib(n-
int Fib(int n)
{
int k;
if (n==0) k=0;
else if (n==1) k=1;
else k=Fib(n-
k=Fib(n-2)+Fib(n-
2)+Fib(n-1);
return(k);
return(k);
}
Fib(4)

Skema Pemanggilan Fib(3) Fib(2)


Fib(4)
Fib(2) Fib(1) Fib(1) Fib(0)

Fib(1) Fib(0)

4
Latihan
Perpangkatan dua buah bilangan, mn, n>=0, dapat dituliskan
dalam bentuk definisi rekursif:

1, n=0 // kondisi penghentian


mn =
m * m(n -1), n > 0 // langkah rekursif

Buatlah fungsi dalam C untuk mengimplementasikan definisi


rekursif tersebut.

Anda mungkin juga menyukai