Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека

Автор: SerjUfa 28.02.2021 22:23

здравствуйте.
Выходит ошибка "Ошибка времени выполнения: 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.

Автор: Федосеев Павел 1.03.2021 2:25

Явная ошибка в условии - для чётного n>=3 выбирается ветвь
F(n) = n + 2*F(n + 2), когда n ≥ 3 и четно
вызывается рекурсивно функция F(n+2) опять же с параметром чётным и превышающим 3.

Автор: SerjUfa 1.03.2021 2:45

Цитата(Федосеев Павел @ 1.03.2021 2:25) *

Явная ошибка в условии - для чётного n>=3 выбирается ветвь
F(n) = n + 2*F(n + 2), когда n ≥ 3 и четно
вызывается рекурсивно функция F(n+2) опять же с параметром чётным и превышающим 3.

понятно. спасибо

Автор: buy cialis online without prescr 1.09.2021 15:21

Propecia Diabetes Dejar De Fumar