Страница 1 из 1

ошибка "Ошибка времени выполнения: StackOverflowException: П

СообщениеДобавлено: 28.02.2021 19:41:23
serjufa
здравствуйте.
Выходит ошибка "Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека". В чем ошибка, не пойму.

Вот задача
(Е. Джобс) Алгоритм вычисления функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = n + 1 при n < 3,
F(n) = n + 2*F(n + 2), когда n ≥ 3 и четно,
F(n) = F(n – 2) + n – 2, когда n ≥ 3 и нечетно.
Сколько существует чисел n, для которых значение F(n) будет трехзначным.
Ответ известен : 22

Ниже мой проект программы:
//Функция F
function F(n: integer): integer;
begin
if n < 3 then
F := n + 1
else
if ((n mod 2) = 0) then
F := n + 2 * F(n + 2)
else
F := F(n - 2) + n - 2;
end;

var
cikl, kolvo: integer;
//Основная часть программы, где запускаем функцию.
begin
kolvo := 0;
for cikl := 1 to 100 do
begin
if (F(cikl) >= 100) and (F(cikl) <= 999) then
kolvo := kolvo + 1;
end;

WriteLn(cikl);
end.

Re: ошибка "Ошибка времени выполнения: StackOverflowExceptio

СообщениеДобавлено: 28.02.2021 20:58:14
runewalsh
Если
>F(n) = n + 2*F(n + 2), когда n ≥ 3 и четно
то F(n) требует (вызывает) F(n + 2). Если число n чётное и ≥3, то число (n + 2) тоже чётное и тем более ≥3, так что процесс никогда не завершится, а если использовать рекурсию — превысит её максимальную глубину. Автор или ты перепутал плюс с минусом или единицу с двойкой.

Re: ошибка "Ошибка времени выполнения: StackOverflowExceptio

СообщениеДобавлено: 28.02.2021 22:12:17
serjufa
Спасибо. Видимо, автор (г-н Поляков) опечатался в задании по ЕГЭ.