Perhatikan fungsi-fungsi berikut untuk soal nomor 32 dan 33.
function mangga(rambutan : integer) : integer; begin if (rambutan = 1) then mangga := 1 else if (rambutan mod 2 = 1) then mangga := mangga(3 * rambutan + 1) else mangga := mangga(rambutan div 2); end; function jeruk(anggur, melon : integer) : integer; begin if (melon = 1) then jeruk := 0 else jeruk := mangga(anggur) * anggur + jeruk(anggur, melon - 1); end;
-
Berapakah hasil pemanggilan fungsi
mangga(49)
?- 1
- 7
- 14
- 21
- 49
-
Berapakah hasil pemanggilan fungsi
jeruk(25, 20)
?- 425
- 450
- 475
- 500
- 525
-
Fungsi mangga pasti akan mengembalikan nilai 1.
Karena jika bilangannya adalah ganjil, maka fungsi
melakukan rekursi dengan 3x parameter sebelumnya + 1.
Sedangkan jika genap, parameter akan dibagi 2.
Jika awalnya parameter bernilai 49, maka
49 → 148 → 74 → 37 → 112 → 56 →
28 → 14 → 7 → 22 → 11 → 34 →
17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16
8 → 4 → 2 → 1. -
Seperti sudah dijelaskan sebelumnya bahwa fungsi
mangga akan selalu mengembalikan nilai 1. Sehingga
dalam perkalian tidak akan berpengaruh.Fungsi jeruk akan melakukan rekursi dengan mengurangi
parameter kedua (melon) sebanyak 1. Sehingga
program akan mengembalikan nilai anggur*(melon-1).Dengan demikian jeruk(25,20) = 25*(20-1) = 475 (C).