Форум » Рекурсивные процедуры и функции » ЕГЭ 16 » Ответить

ЕГЭ 16

Анна Воронова: Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = n, при n ≤ 1 F(n) = n + F(n / 3-1) , при n > 1 и делиться на 3 F(n) = n + F(n+3), при нечётных n > 1 и не делится на 3 Назовите минимальное значение n , для которого F(n)>1000 [pre2]var n: integer; i: integer; function F(n: integer) : integer; begin if n <= 1 then F := n else if (((n mod 3) = 0) and (n > 1)) then F := n + F(n div 2 - 1) else if (((n mod 3) <> 0) and (n > 1)) then F := n + F(n +3); end; begin i := 1; while F(i) <=1000 do i := i + 1; writeln(i); end.[/pre2] Ошибка: Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека Пожалуйста, помогите понять, что не так?

Ответов - 1

Поляков: Из условия видно, что при некоторых n вы получаете бесконечную рекурсию. Что с ней делать, можно посмотреть в соседних темах, например, здесь.



полная версия страницы