Ниже записаны две рекурсивные функции (процедуры): F и G.Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(12)? procedure F(n: integer); begin writeln('*'); if n больше 0 then begin writeln('...
Ниже записаны две рекурсивные функции (процедуры): F и G.Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(12)?
procedure F(n: integer);
begin
writeln('*');
if n > 0 then begin
writeln('*');
G(n - 1);
end;
end;
procedure G(n: integer);
begin
writeln('*');
if n > 1 then begin
writeln('*');
F(n - 2);
end;
end;
Можете подробно расписать пожалуйста))))
Ответ(ы) на вопрос:
Гость
Для того, чтобы эта программа заработала надо добавить перед описанием процедуры F следующую строчку:
procedure G(n: integer);forward;
Так как в процедуре F есть вызов процедуры G описанной дальше по тексту программы.
После исправления кода и запуска программы с F(12) получим 17 звездочек. По шагам это будет выглядеть так:
Вызов процедуры F и выполнение
* n = 12
* n = 12
Вызов процедуры G и выполнение
* n = 11
* n = 11
Вызов процедуры F и выполнение
* n = 9
* n = 9
Вызов процедуры G и выполнение
* n = 8
* n = 8
Вызов процедуры Fи выполнение
* n = 6
* n = 6
Вызов процедуры G и выполнение
* n = 5
* n = 5
Вызов процедуры F и выполнение
* n = 3
* n = 3
Вызов процедуры G и выполнение
* n = 2
* n = 2
Вызов процедуры F и выполнение
* n = 0
Гость
n=12
F (12) печатает * *
вызывает G(11) **
F(9) печатает **
вызывает G(8) 8**
F(6) **
G(5) **
F(3) **
G(2) **
F(1) * и идёт вызов G(0) и n>1 не выполняется и ----> выход
Итого 17 *
( в Вашей программе ошибки, посмотрите мою)
Не нашли ответ?
Похожие вопросы