Ниже записаны две рекурсивные функции (процедуры): 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 * ( в Вашей программе ошибки, посмотрите мою)
Не нашли ответ?
Ответить на вопрос
Похожие вопросы