Помогите разобрать программу пожалуйста Запишите подряд без пробелов и разделителей вес...

0 голосов
67 просмотров

Помогите разобрать программу пожалуйста

Запишите подряд без пробелов и разделителей вес числа, которые будут напечатаны при выполнении вызова F9
procedure F(n: integer);
begin
if n>0 then
begin
write (n);
F(n-2);
F(n div 4);
end
end;


Информатика (20 баллов) | 67 просмотров
Дан 1 ответ
0 голосов

Procedure F(n: integer);
begin
  if n>0 then begin
    Write (n);
    F(n-2);
    F(n div 4);
    end
end;

begin
  F(9);
end.

На выходе будет 97531112

Если нужна трассировка, её можно сделать примерно так:

procedure F(n: integer);
begin
  Writeln('Вход');
  if n>0 then begin
    Writeln ('В выходную строку: ',n);
    Writeln('Вызов F(n-2)');
    F(n-2);
    Writeln('Вызов F(n div 4)');
    F(n div 4);
    end;
    Writeln('Выход')
end;

begin
  F(9);
end.

Результат трассировки:
Вход
В выходную строку: 9
Вызов F(n-2)
Вход
В выходную строку: 7
Вызов F(n-2)
Вход
В выходную строку: 5
Вызов F(n-2)
Вход
В выходную строку: 3
Вызов F(n-2)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 2
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход

(142k баллов)