Регистрация
Войти
Стать экспертом Правила
Информатика

Ниже на языке прогаммирования паскаль записаны две рекурсивные функции (процедуры): F и G. Как узнать сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(20)?Procedure F(n: integer) ; forward;Procedure G(n: integer) ; forward;procedure F(n: integer) ; BeginWrite ('*');If n > 10 then F(n-2) else G(n);End;Procedure G(n: integer) ; BeginWrite ('**');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. Осталось оформить , сделав вид, что это не программная выдача, а "я такой умный, на бумажке расписал".

А "ненормальные люди" и в самом деле делают это вручную, не понимая, что ручной разбор рекурсии такой длины - это глупость.


100
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам