Форум » Рекурсивные процедуры и функции » Ошибка в программе » Ответить

Ошибка в программе

Кэйт: Задание: Алгоритм вычисления функции F(n) задан следующими соотношениями: F(n) = 1 при n = 1, F(n) = 2·F(n–1), если n чётно, F(n) = 5n + F(n–2), если n нечётно. Чему равно значение функции F(64)? Программа: function f(n:integer):integer; begin if n =1 then f:=1; if (n mod 2=0) then f:=2*f(n-1); if ( n mod 2<>0) then F:=(5*n) + (F*(n-2)); end; begin writeln (f(64)); end. Ошибка: Program1.pas(5) : Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека

Ответов - 5

Анна_Л: Да, рекурсии - они такие... Значит, нужно найти решение обычным циклом или в электронных таблицах

Поляков: Кэйт пишет: Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека Применяйте динамическое программирование.

Волкова: использовать exit ?


Волкова: function f(n:integer):integer; begin if n =1 then begin f:=1; exit; end; if (n mod 2=0) then begin f:=2*f(n-1); exit; end; if ( n mod 2<>0) then begin F:=5*n+F(n-2); exit; end; end; begin print (f(64)); end.

alspay: хм... все работает function f(n:longint):longint; begin if n =1 then f:=1 else if (n mod 2=0) then f:=2*f(n-1) else F:=(5*n) + (F(n-2)); end; begin writeln (f(64)); end.



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