Ниже записаны две рекурсивные функции (процедуры): F и G.Сколько символов «звёздочка»...

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

Ниже записаны две рекурсивные функции (процедуры): 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;
Можете подробно расписать пожалуйста))))


Информатика (17 баллов) | 254 просмотров
Дано ответов: 2
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 *
( в Вашей программе ошибки, посмотрите мою)

(87.0k баллов)
0

Спасибо)))

0 голосов

Для того, чтобы эта программа заработала надо добавить перед описанием процедуры 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




(13.9k баллов)
0

Спасибо)))