MODUL 10
Rekursif
1
Fokus – Hebat -Juara
DAFTAR ISI
Rekursif ≈ 3 ≈
Contoh soal dan pembahasan ≈ 6 ≈
Soal latihan ≈ 13 ≈
Kunci jawaban soal latihan ≈ 18 ≈
2
Fokus – Hebat -Juara
Rekursif
Secara umum, rekursi adalah sesuatu yang didefinisikan dari dirinya sendiri. Secara khusus
di dunia ilmu komputer, rekursi adalah metode pemecahan masalah dengan memper-kecil
permasalahan menjadi lebih kecil, lebih kecil, dan lebih kecil lagi hingga permasalahan menjadi
cukup kecil untuk diselesaikan secara trivial.
Algoritma rekursi terdiri dari 2 bagian :
1. Basis, kasus terkecil yang dapat diselesaikan secara trivial
2. Rekurens, kasus yang didefinisikan dari kasus lain yang lebih kecil
Aksi pada bagian if disebut sebagai basis, karena akan menjadi penghenti dari fungsi rekursi
tersebut, sedangkan aksi pada bagian else disebut sebagai rekurens.
3
Fokus – Hebat -Juara
Jika fungsi fibonacci di atas dipanggil dengan fib(5), maka yang terjadi adalah :
(Daerah dalam kotak menandakan bahwa kontrol program berpindah ke pemanggilan fungi
tersebut. Dan setelah nilai ditemukan, kontrol program kembali ke fungsi pemanggil). Langkah
inilah yang dilakukan oleh program, disebut sebagai langkah top-down.
Contoh :
function panggil1(x:longint):longint;
begin
if (x<3) then panggil1:=0
else panggil1:=panggil1(x-1)+2*panggil1(x-2)+3;
end;
Bila fungsi di atas dipanggil dengan panggil1(7), maka hasil keluarannya adalah:
A. 7
B. 28
C. 34
D. 63
E. 97
4
Fokus – Hebat -Juara
Jawab :
Kita tidak perlu menuliskan langkah-langkah rekursi sesuai dengan kontrol program. Kita cukup
hitung nilai dari panggil1() untuk parameter 1, lalu 2, lalu 3, dan seterusnya. Cara seperti ini disebut
sebagai langkah bottom-up.
panggil1(1) = 0
panggil1(2) = 0
panggil1(3) = panggil1(2) + 2.panggil1(1) + 3 = 3
panggil1(4) = panggil1(3) + 2.panggil1(2) + 3 = 6
panggil1(5) = panggil1(4) + 2.panggil1(3) + 3 = 15
panggil1(6) = panggil1(5) + 2.panggil1(4) + 3 = 30
panggil1(7) = panggil1(6) + 2.panggil1(5) + 3 = 63
Jawaban : D
5
Fokus – Hebat -Juara
Manakah perintah berikut yang berisi pemanggilan-pemanggilan fungsi f diatas yang akan
mencetak harga true?
A. writeln(f(57, 3) and f(62, 7));
B. writeln(f(53, 7) or f(62, 7));
C. writeln(f(24, 3) and f(42, 7));
D. writeln(f(24, 3) and f(47, 2));
E. writeln(f(43, 2) and f(72, 8));
Pembahasan :
Fungsi f(x, a) selama x>a, akan mengacu ke fungsi f(x-a, a).
Dan hanya akan mencapai x=a jika x kelipatan a.
Fungsi akan menghasilkan true, jika x kelipatan a, sebaliknya false jika bukan.
Jawaban : C
Bila fungsi di atas dipanggil dengan sikat(2,4), maka hasi keluarannya adalah:?
A. 78
B. 79
C. 80
D. 81
E. 82
Pembahasan :
Untuk soal ini, kita selesaikan dengan metode top-down
6
Fokus – Hebat -Juara
Pembahasan :
Perhatikan bahwa fungsi akan terus memanggil rekursi hingga x bernilai negatif. Karena mula-mula
x positif, maka fungsi akan mencapai basis ketika x mencapai -1. Saat itu tercapai, y telah
ditambahkan sebanyak 56, sehingga y=66+56=122
Jawaban : C
7
Fokus – Hebat -Juara
Pembahasan :
Dalam xyz(10, 20, 30),
t = ab(10, 30) = ab(11, 29) = ab(12, 28) = … = ab(20, 20) = ab(21, 19) = 399
xyz = ab(399, 20) = 7980
Jawaban : A
8
Fokus – Hebat -Juara
C. writeln(xyz(1, 3, 1));
D. Ada lebih dari satu jawaban benar
E. Tidak ada jawaban benar
Pembahasan :
Dalam xyz(1, 1, 2),
t = ab(1, 2) = ab(2, 1) = 2
xyz = ab(2, 1) = 2
Pembahasan :
Penambahan zzz terdapat pada pemanggilan fungsi xyz dan pemanggilan fungsi ab.
Perhatikan kembail alur pemanggilang fungsi pada pembahasan di atas
Dalam xyz(10, 20, 30),
t = ab(10, 30) = ab(11, 29) = ab(12, 28) = … = ab(20, 20) = ab(21, 19) = 399
xyz = ab(399, 20) = 7980
9
Fokus – Hebat -Juara
Pembahasan :
Dalam f(10, 11, 12)
Karena y ganjil, z akan ditambahkan dengan 10 menjadi 22
lalu panggil f(20, 5, 22)
10
Fokus – Hebat -Juara
if (a < b) then f := a
else f := b
end;
end;
begin
8. Apakah keluaran dari program tersebut?
A. 1
B. 2
C. 15
D. 17
E. 28
Pembahasan :
Perhatikan bahwa fungsi rekursi f(a, b) akan mencari bilangan terkecil di antara elemen array Z dari
index a hingga index b.
Metode yang digunakan adalah divide-and-conquer, dimana masalah pencarian elemen terkecil
dibagi ke dalam dua selang, selang kiri dan selang kanan.
Elemen terkecil di array Z antara index 1 sampai 9 adalah 2
Jawaban : B
11
Fokus – Hebat -Juara
A. 121
B. 91
C. 101
D. 41
E. 32
12