Форум » Рекурсивные процедуры и функции » задание 16 №74 » Ответить

задание 16 №74

evggudkova: Подскажите, как решить задачу 74?

Ответов - 9

polyakovss: [pre2] def g(n): if n % 2 == 0: return -1 else: return 1 def f(n): if n < -100000: return 1 if n > 10: return f(n - 1) + 3*f(n - 3) + 2 return g(n) print(f(20)) [/pre2]

evggudkova: *PRIVAT*

Св: Можно решение в Паскале?


polyakovss: [pre2] function g (n:integer) : integer; begin if n mod 2 = 0 then g := -1 else g := 1 end; function f (n:integer) : integer; begin if n < - 100000 then f:=1 else if n > 10 then f := f(n-1) + 3 * f(n-3) + 2 else f := g(n) end; begin writeln(f(20)) end. [/pre2]

interest: polyakovss , я разобралась. Просьба выше не актуальна.

егэшник: polyakovss, условие задачи выглядит так: F(n) = 1, при n < –100000, F(n) = F(n – 1) + 3*F(n – 3) + 2, при n > 10, F(n) = – F(n – 1) для остальных случаев. Непонятно, где g(n) и причем четность? Пожалуйста, объясните!

polyakovss: егэшник пишет:polyakovss, условие задачи выглядит так: F(n) = 1, при n < –100000, F(n) = F(n – 1) + 3*F(n – 3) + 2, при n > 10, F(n) = – F(n – 1) для остальных случаев. Совершенно верно. Именно эта задача решена в (polyakovss Сообщение: 355 и Сообщение: 371). егэшник пишет:Непонятно, где g(n) В условии задачи g(n) нет, но с помощью g(n) вычисляется "F(n) = – F(n – 1) для остальных случаев". Результат при решении этой задачи один и тот же. Не все задачи решаются "в лоб". Попробуем проанализировать условие. Из "F(n) = 1, при n < –100000" следует, что первом нечетном числе "-100001" F(-100001) = 1. Тогда из "F(n) = – F(n – 1) для остальных случаев" следует, что F(-100000) = -1. Аналогично, F(- 99999) = 1, а F(- 99998) = -1 и так далее. Поскольку в задаче нужно найти F(20), то для завершения рекурсии этого с избытком достаточно. Из проведенного анализа следует, что эту задачу можно очень быстро решить и так:[pre2] def f(n): if n < 8: return 1 if n > 10: return f(n - 1) + 3*f(n - 3) + 2 return - f(n - 1) print(f(20)) [/pre2]

эгэшник: polyakovss, большое спасибо!

interest: polyakovss , спасибо за предложенное решение. А можно прокомментировать функцию g(n)?



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