Предмет: Информатика, автор: g1743740

Рекурсивный алгоритм.
Найти сумму чисел, полученных при вызове F(1).
Ответ: 530.

Объясните принцип решения, прошу.

Приложения:

Аноним: чушь какая-то. Кто это будет руками такую рекурсию прокручивать, 91 число на выдаче. А если программно подсчитать, то надо просто вставить вместо печати суммирование в глобальную переменную.
g1743740: Вот-вот. Сам в замешательстве. Прокручивал до этого рекурсии по 80-90, а тут в пробнике пришло такое. Жесть!
Аноним: Могу написать свою версию программы, которая получает значение 530.
g1743740: Было бы замечательно.

Ответы

Автор ответа: Аноним
1
Трассировка вызовов, печатаемых значений и подсчет суммы

var
  s:integer;

procedure F(n:integer);
begin
  Write(' F(',n,') ');
  Write(n,' '); s:=s+n;
  if n<6 then begin
    Write(n); s:=s+n;
    F(n+1);
    F(n+2);
    F(2*n)
  end
end;

begin
  s:=0;
  F(1);
  Writeln(#13#10,s)
end.

Результат выполнения программы:
 F(1) 1 1 F(2) 2 2 F(3) 3 3 F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8  F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8  F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8  F(3) 3 3 F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8  F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(2) 2 2 F(3) 3 3 F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8  F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8  F(4) 4 4 F(5) 5 5 F(6) 6  F(7) 7  F(10) 10  F(6) 6  F(8) 8
530



mnv1962: F(3)=83
mnv1962: F(2)=177
mnv1962: F(1)=438
Аноним: У Вас ошибка: во фрагменте if n < 6 then begin
writeln(n);
F(n+2); у Вас нет подсуммирования, хотя значение выводится.
Аноним: Правильность моего решения, кроме всего, подтверждена тем, что сумма сходится с приведенной автором вопроса.
mnv1962: Точно.
Аноним: Если будет скучно, рекомендую Вашему вниманию руками прокрутить функцию Аккермана. Ана была им предложена в свое время, как некий вызов создателям компиляторов с языков, разрешающих рекурсию. Подробности, думаю, есть в интернет.
mnv1962: Я балда. Я прозевала Writeln(n) до условия. Ничего не меняется у меня
mnv1962: А скучно мне не бывает никогда. Времени нет на скуку
mnv1962: В смысле наоборот я не считаю сумму в условии
Похожие вопросы
Предмет: Русский язык, автор: 909580154polina