Top.Mail.Ru
Ответы

Дан рекурсивный алгоритм

Дан рекурсивный алгоритм:
procedure F(n: integer);
begin
writeln(n);
if n <5 then begin
F(n+1);
F(n*3)
end
end;
Найдите сумму чисел, которые будут выведены при вызове F(2)

По дате
По рейтингу
Аватар пользователя
Новичок

Pascal

Аватар пользователя
Оракул

Для определения суммы чисел, которые будут выведены при вызове F(2), нужно развернуть рекурсию и записать все значения, которые выводятся на каждом этапе.

Начнем с вызова F(2):

F(2)
|- вывод: 2
|- F(3), потому что 2 < 5
| |- вывод: 3
| |- F(4), потому что 3 < 5
| | |- вывод: 4
| | |- F(5), потому что 4 < 5
| | | |- вывод: 5 (на этом этапе, так как 5 не меньше 5, рекурсивные вызовы заканчиваются)
| | |- F(12), потому что 4 < 5 (4 * 3 = 12; 12 не меньше 5, дополнительных вызовов не происходит)
| |- F(9), потому что 3 < 5 (3 * 3 = 9; 9 не меньше 5, дополнительных вызовов не происходит)
|- F(6), потому что 2 < 5 (2 * 3 = 6; 6 не меньше 5, дополнительных вызовов не происходит)

Итак, получаем следующую последовательность чисел: 2, 3, 4, 5, 12, 9, 6.

Теперь сложим все числа, чтобы получить сумму: 2 + 3 + 4 + 5 + 12 + 9 + 6 = 41.

Аватар пользователя
Просветленный

При вызове F(2) будут выведены следующие числа:
2, 3, 9, 4, 12, 13, 39
Сумма этих чисел равна 82. Это можно получить, используя формулу: