Форум » Рекурсивные процедуры и функции » ошибка в опубликованном решении к задаче 69 ege 16 » Ответить

ошибка в опубликованном решении к задаче 69 ege 16

s11kai: [pre2] // Автор: Зубов Н.С. function F( n: integer ): integer; begin if n < 4 then Result := n-1; if (n > 3) and (n mod 3=0) then Result :=n+ 2*F(n-1) else Result :=F(n-2)+F(n-3) end; begin writeln( F(25) ); end. [/pre2] Пробовал запустить опубликованную программу Зубова Н.С. в PABCNET. Выдает ошибку: "Программа завершена из - за переполнения стека" в PABC. Выдает ошибку: "Слишком много вложенных вызовов подпрограмм" Предлагаю небольшую коррекцию c последующей доработкой программы, которая выдаст правильный ответ: [pre2] var s,ss:integer; function F( n: integer ): integer; begin if n < 4 then begin Result := n-1; Exit; end; if (n > 3) and (n mod 3=0) then Result :=n+ 2*F(n-1) else Result :=F(n-2)+F(n-3) end; begin s := F(25); while s>0 do begin ss := ss+s mod 10; s := s div 10; end; writeln( 'summa = ',ss ); end. [/pre2]

Ответов - 2

Поляков: Спасибо за замечание. Очевидно, что там else пропущен. Можно так сделать: [pre2] function F( n: integer ): integer; begin if n < 4 then Result := n-1 else if n mod 3 = 0 then Result := n + 2*F(n-1) else Result := F(n-2) + F(n-3) end; begin writeln( F(25).ToString.Select(x->StrToInt(x)).Sum ); end. [/pre2]

s11kai: Круто



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