Помощь - Поиск - Пользователи - Календарь
Полная версия: Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Free Pascal, Pascal ABC и другие
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.
Федосеев Павел
Явная ошибка в условии - для чётного n>=3 выбирается ветвь
F(n) = n + 2*F(n + 2), когда n ≥ 3 и четно
вызывается рекурсивно функция F(n+2) опять же с параметром чётным и превышающим 3.
SerjUfa
Цитата(Федосеев Павел @ 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
Propecia Diabetes Dejar De Fumar
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.