Форум » Рекурсивные процедуры и функции » Не выводит ответ. Е.Джобс № 780 » Ответить

Не выводит ответ. Е.Джобс № 780

aksy: Здравствуйте! Подскажите как на Паскаль решить. Ответ не выводит вообще. Е.Джобс № 780 Алгоритм вычисления функции F(n) задан след. соотношениями: F(n)=1 при т=0 F(n)=2*F(1-n)+3*F(n-1)+2 при n>0 F(n)=-F(-n) при n<0 Чему равна сумма цифр зн-я функции F(50)? Не пойму в чем ошибка, не выводит ответ... Подскажите, пожалуйста. [pre2] function F(n: integer): integer; begin if n = 0 then F := 1; if n > 0 then F := 2 * F(1 - n) + 3 * F(n - 1) + 2; if n < 0 then F := -F(-n); end; begin writeln(F(50)); end. [/pre2]

Ответов - 2

Поляков: aksy пишет: Ответ не выводит вообще. Чтобы функция много раз не вычисляла одно и тоже, все вычисленные значения нужно сохранять в словаре (это называется мемоизация): [pre2] var m := new Dictionary<integer, integer>; function F( n: integer ): integer; begin if n in m then Result := m[n] else begin if n = 0 then Result := 1 else if n > 0 then Result := 2*F(1-n) + 3*F(n-1) + 2 else Result := -F(-n); m[n] := Result; end; end; begin Print( F(50) ) end.[/pre2]

aksy: спасибо большое!



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