Perhatikan pseudocode berikut:
procedure mystery(a:integer; b:integer;);
var m:integer;
begin
if (a <> b)
begin
writeln(‘OSK2017’);
m := (a + b) / 2;
mystery(a, m);
mystery(m, b);
end;
end;
Berapa kali teks ‘OSK2017’ dicetak pada pemanggilan mystery(0,8) ?
a. 4
b. 5
c. 6
d. 7
e. program tidak pernah berhenti
Jika ingin mendownvote, jangan lupa juga untuk komen tentang kesalahannya. That'll be helpful for everyone, don't let that be a habit.
Dapat diperhatikan bahwa nilai m adalah nilai rata-rata dari a dan b.
Salah satunya cara adalah mengikuti jalannya prosedur tersebut:
Perhatikan pada prosedur yang diboldkan. Karena prosedur tersebut memanggil dirinya sendiri dengan parameter yang sama dan dengan batasan yang tidak jelas, maka akan terjadi infinite loop pada program tersebut atau program tidak pernah berhenti.
Masuk untuk menulis jawaban
Doakan OSN Padang
e. program tidak pernah berhenti
mystery(0,8) --> 'OSK2017' --> mystery(0,4) --> 'OSK2017' --> mystery(0,2) --> 'OSK2017' --> mystery(0,1) --> 'OSK2017' --> mystery(0,0)
--> mystery(0,1)
terjadi infinite loop (program tidak akan berhenti) karena mystery(0,1) akan memanggil mystery(0,1) lagi
e