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

0 голосов
48 просмотров

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

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


image

Информатика (28 баллов) | 48 просмотров
0

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

0

Вот-вот. Сам в замешательстве. Прокручивал до этого рекурсии по 80-90, а тут в пробнике пришло такое. Жесть!

0

Могу написать свою версию программы, которая получает значение 530.

0

Было бы замечательно.

Дан 1 ответ
0 голосов
Правильный ответ
Трассировка вызовов, печатаемых значений и подсчет суммы

var
  s:integer;

procedure F(n:integer);
begin
  Write(' F(',n,') ');
  Write(n,' '); s:=s+n;
  if n<6 then begin<br>    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


(142k баллов)
0

F(3)=83

0

F(2)=177

0

F(1)=438

0

У Вас ошибка: во фрагменте if n < 6 then begin
writeln(n);
F(n+2); у Вас нет подсуммирования, хотя значение выводится.

0

Правильность моего решения, кроме всего, подтверждена тем, что сумма сходится с приведенной автором вопроса.

0

Точно.

0

Если будет скучно, рекомендую Вашему вниманию руками прокрутить функцию Аккермана. Ана была им предложена в свое время, как некий вызов создателям компиляторов с языков, разрешающих рекурсию. Подробности, думаю, есть в интернет.

0

Я балда. Я прозевала Writeln(n) до условия. Ничего не меняется у меня

0

А скучно мне не бывает никогда. Времени нет на скуку

0

В смысле наоборот я не считаю сумму в условии