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

Задание 16 №41

Inna: Не пойму в чем ошибаюсь? Мой код: def F(n): if n == 1: return 1 else: return F(n-1)-2*G(n-1) def G(n): if n == 1: return 1 else: return F(n-1)+G(n-1)+n print(G(36)) Для n=22 код работает, а при n=36 ничего не вычисляет. Почему?

Ответов - 2

polyakovss: Здравствуйте, Inna! Вы пишете: Для n=22 код работает, а при n=36 ничего не вычисляет. Почему?Для больших значений аргумента рекурсивная функция может вычисляться недопустимо долго. В этом случае нужно заменить рекурсивную функцию нерекурсивной, например, для рассматриваемой задачи 41 так: [pre2]def f(n): a = [0,1] b = [0,1] for i in range(2,n+1): a.append(a[i-1]-2*b[i-1]) b.append(a[i-1]+b[i-1]+i) return b[n] print(sum([int(x) for x in str(f(36))])) # или: print(sum( map(int, str(f(36))) ))[/pre2]

Inna: Большое спасибо! Понятно!



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