Форум » Рекурсивные процедуры и функции » Задача №3469 » Ответить

Задача №3469

golikova: (Е. Джобс) Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = 1 при n = 0 F(n) = 2·F(1-n) + 3·F(n-1) + 2, если n > 0, F(n) = - F(-n), если n < 0. Чему равна сумма цифр значения F(50)? при F(50) программа зависает на долго. а при F(5) выводит правильный ответ. значение 50 - это опечатка? [pre2] def f(n): if n==0: return 1 elif n>0: return 2*f(1-n)+3*f(n-1)+2 elif n<0: return (-1)*f(-n) print(f(50)) [/pre2]

Ответов - 4

cabanov.alexey: Нет, просто решать её в лоб не надо

polyakovss: [pre2] def f(n): if n == 0: return 1 if n == 1: return 7 if n > 1: return f(n - 1) + 2 print(sum( map(int, str(f(50))) ))[/pre2]

aln1947: Уважаемый Алексей Михайлович! А как эту задачу решить "не в лоб"? Я пытался решить подобную задачу 16.99 в лоб. Нужно найти F(47), но при F(40) время решения около 10 минут,а дальше я не пробовал. Как ее решить "не в лоб"? Подскажите, пожалуйста.


ivackov.sergey: Надо задействовать мемоизацию. В Python и PascalABC.NET все сработало!



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