1Nicol1
22.01.2023 03:26

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

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Димасик2017
23.09.2020 20:48
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 *
( в Вашей программе ошибки, посмотрите мою)
0,0(0 оценок)
Ответ:
MintSuga
23.09.2020 20:48
Для того, чтобы эта программа заработала надо добавить перед описанием процедуры 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

Ниже записаны две рекурсивные функции (процедуры): f и g.сколько символов «звёздочка» будет напечата
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота