You are on page 1of 17

REKURSI

STRUKTUR DATA Manajemen Informatika Politeknik Manufaktur Astra 2018


Konsep Rekursi
 Konsep perulangan diluar pendekatan iterative
 Suatu proses yang memanggil dirinya sendiri, proses tersebut dapat berupa prosedur
atau fungsi
 Perhatikan bahwa setiap pemanggilan fungsi membutuhkan resource memori

Manajemen Informatika Politeknik Manufaktur Astra 2017


Karakteristik Fungsi Rekursi
 Memanggil fungsi itu sendiri
 Memiliki parameter sentinel, yaitu parameter yang dapat mengarahkan fungsi agar
berakhir
 Akan terdiri dari base case dan recursion case

Manajemen Informatika Politeknik Manufaktur Astra 2017


Rekursi – Pendekatan Matematika
 Contoh:
Fungsi matematika foaktorial – n
n! = n * (n-1) * (n-2) * (n-3) * ……* 2 * 1
n! = n * (n-1)!

Dimana,
n>0

Manajemen Informatika Politeknik Manufaktur Astra 2017


Rekursi – Pendekatan Matematika
0! =1
4! =4*3*2*1

Fungsi tersebut menunjukkan sifat rekursi berupa pemanggilan terhadap fungsi factorial – n
berulang kali.

Int factorial (int n) {


return n * factorial (n-1);
}

Manajemen Informatika Politeknik Manufaktur Astra 2017


Rekursi – Pendekatan Matematika
 Proses rekursi setidaknya memiliki parameter yang menentukan proses rekursi lanjut
atau berakhir  Parameter Sentinel

Int factorial (int n) { Proses rekursi megarahkan parameter sentinel


if (n > 0){ terlalui sehingga proses rekursi dapat berakhir.
return n * factorial (n-1);
} Pada contoh, dapat dilihat bahwa parameter
else{ diarahkan dengan pengurangan nilai n dengan 1
return 1;} sehingga proses rekursi dapat berakhir saat nilai
} n = 0.

Manajemen Informatika Politeknik Manufaktur Astra 2017


Rekursi – Pendekatan Matematika
Int factorial (int n) { Recursion case What is my base
if (n > 0){ case and what is
return n * factorial (n-1); my recursive case?
}
Parameter sentinel
else{
return 1;}
}
Base case

Manajemen Informatika Politeknik Manufaktur Astra 2017


Rekursi – Pendekatan Matematika
Faktorial (3){ 3*2*1
if (3>1){
return 3 * factorial(2)}
}

Faktorial (2){ 2*1


if (2 > 1){
return 2 * factorial(1)}
}

Faktorial (1){
1
if (2 > 1){…}
else return 1;}
Manajemen Informatika Politeknik Manufaktur Astra 2017
Konsep Last in First Out Pada Recursion
I want to compute sumInts(2, 5)
The computation yielded 0, therefore I shall return 5 = 5 + 0.
for this, I need to compute sumInts(3, 5)
The computation yielded 5, therefore I shall return 9 = 4 + 5.
and add 2 to the result. The computation yielded 9, therefore I shall return 12 = 3 + 9.
I want to compute sumInts(3, 5) The computation yielded 12, therefore I shall return 14 = 2 + 12.
for this, I need to compute sumInts(4, 5)
and add 3 to the result.
func sumInts(a: Int, b: Int) -> Int {
I want to compute sumInts(4, 5)
if (a > b) {
for this, I need to compute sumInts(5, 5) return 0 }
and add 4 to the result. else {
return a + sumInts(a: a + 1,b:
I want to compute sumInts(5, 5) b) }
for this, I need to compute sumInts(6, 5) }

and add 5 to the result.


I want to compute sumInts(6, 5)

Manajemen
since Informatika
6 > 5, this is zero. Politeknik Manufaktur Astra 2017
Konsep Last in First Out Pada Recursion

Manajemen Informatika Politeknik Manufaktur Astra 2017


Recursion vs Iteration
 Penggunaan rekursi tidak selalu ‘dibutuhkan’
 Not even allowed in some languages
 Seluruh task yang dapat diselesaikan dengan rekursi, juga dapat diselesaikan tanpa
rekursi
 Dengan menggunakan nonrekursi: iterasi menggunakan perulangan /loop
 Recursive – Bekerja lebih lama dan menggunakan memory lebih banyak
 Solusi ‘elegant’, coding lebih sederhana dan simple
 Rekursi akan bekerja lebih intuitive dalam beberapa kasus, dimana lebih mendekati
pendekatan permasalahan
 Beberapa data structure akan lebih mudah diekplorasi menggunakan rekursi

Manajemen Informatika Politeknik Manufaktur Astra 2017


Recursion vs Iteration

Ease and clarity of implementation

Should I use
iteration or
recursion?
Time/space efficiency.

Manajemen Informatika Politeknik Manufaktur Astra 2017


Tower of Hanoi
Tower of Hanoi
Tower of Hanoi
 Pseudocode :

 Rekursi (n, Tiang1, Tiang2, Tiang3)


 if (n = 1)
 Pindahkan cakram dari Tiang1 ke Tiang3
 else
 Rekursi (n-1, Tiang1, Tiang3, Tiang2)
 Pindahkan cakram dari Tiang1 ke Tiang3
 Rekursi (n-1, Tiang2, Tiang1, Tiang3)

Manajemen Informatika Politeknik Manufaktur Astra 2017


Tower of Hanoi
Referensi

 Dale, Nell B., et al. 2001. Object Oriented Data Structured Using
Java. Sudbury: Jones and Bartlett Publishers, Inc.
 Hubbard, John R. 2007. Data Structure With Java. New York:
McGraw-Hill Companies, Inc.
 Lafore, R. 1999. Sams Teach Yourself Data Structures and
Algorithms in 24 Hours. Indianapolis: Sams Publishing.

You might also like