Perhatikan potongan program berikut!
var
we: longint;
Z: array[1..15] of longint = (64, 19, 56, 67, 66, 82,
31, 20, 67, 10, 94, 100, 57, 14, 86);
function f(x: longint; y: longint): longint;
var
a, b: longint;
begin
if (x = y) then
f := Z[y]
else begin
a := f(x, (x+y) div 2);
b := f((x+y) div 2+1, y);
if (a < b) then f := a
else f := b
end
end;
begin
we := f(3,11);
writeln(we);
end.
Apakah keluaran dari program tersebut?
Aku noob
Bisa dilihat kalau fungsi f(x,y) akan mengembalikan nilai minimum di antara Z[x], Z[x + 1], ... , Z[y - 1], Z[y]. Nilai minimum pada rentang (3,11) adalah 10
Proses berpikirnya maju mundur,
1. Kan f(3,11),
Karena gak sama, jadi dipecah jadi
a=f(3,7)
b=f(8,11)
Pecahnya ini pakai rumus di program
2. Nahh f(3,7) sendiri juga dipecah, jadinya
a=f(3,5)
b=f(6,7)
3. Nahh f(3,5) ini juga harus dipecah jadi
a=f(3,4)
b=f(5,5)
4. f(3,4) juga harus dipecah lagi jadi
a=f(3,3)
b=f(4,4)
kan udah sama
angkanya tu,
Jadinya
a=f(3,3)=z[3]=56
b=f(4,4)=z[4]=67
nilai 56 sama 67 nya itu diliat di var
karena a<b, maka didapat nilai
f(3,4)=56
5. Kembali ke langkah 3, maka didapat
a=f(3,4)=56
b=f(5,5)=z[5]=66
karena a<b juga, maka
f(3,5)=56
Lakukan proses itu sampai didapat we = 10
Masuk untuk menulis jawaban