Ниже на языке прогаммирования паскаль записаны две рекурсивные функции (процедуры): F и G. Сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(20)? Procedure F(n: integer) ; forward; Procedure G(n: i...

Ниже на языке прогаммирования паскаль записаны две рекурсивные функции (процедуры): F и G. Сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(20)? Procedure F(n: integer) ; forward; Procedure G(n: integer) ; forward; procedure F(n: integer) ; Begin Write ('*'); If n > 10 then F(n-2) else G(n); End; Procedure G(n: integer) ; Begin Write ('**'); If n > 1 then F(n-3); End; Обьясните пожалуйста, как это делать, если можете, то распишите пожалуйста подробно.
Гость
Ответ(ы) на вопрос:
Гость
Все нормальные люди делают это так: procedure F(n:integer); forward; procedure G(n:integer); forward; procedure F(n:integer); begin   Writeln('Вызов F(',n,') - *');   //Write('*');   If n>10 then F(n-2) else G(n);   Writeln('Завершение F(',n,')') end; procedure G(n: integer) ; begin   Writeln('Вызов G(',n,') - **');   //Write('**');   If n>1 then F(n-3);   Writeln('Завершение G(',n,')') end; begin   F(20) end. Результат Вызов F(20) - * Вызов F(18) - * Вызов F(16) - * Вызов F(14) - * Вызов F(12) - * Вызов F(10) - * Вызов G(10) - ** Вызов F(7) - * Вызов G(7) - ** Вызов F(4) - * Вызов G(4) - ** Вызов F(1) - * Вызов G(1) - ** Завершение G(1) Завершение F(1) Завершение G(4) Завершение F(4) Завершение G(7) Завершение F(7) Завершение G(10) Завершение F(10) Завершение F(12) Завершение F(14) Завершение F(16) Завершение F(18) Завершение F(20) Считаем звездочки, их 17. Осталось оформить ответ, сделав вид, что это не программная выдача, а "я такой умный, на бумажке расписал". А "ненормальные люди" и в самом деле делают это вручную, не понимая, что ручной разбор рекурсии такой длины - это глупость.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы