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

Задача 16 №135

AnnaL: Мой ответ больше на 1. Мое решение: for n in range(1,1000+1): if n==1: f=1 else: f=n*f-1 if n==1000: ch=f if n==997: zn=f print(ch/zn) Что не так? Ответ:997002000.0 А если поставить print(ch//zn), то ответ на 1 меньше. Почему так?

Ответов - 3

Поляков: AnnaL пишет: А если поставить print(ch//zn), то ответ на 1 меньше. Почему так? Потому что результат чуть-чуть меньше, чем округленное значение. Если бы вы сделали небольшие выкладки на бумаге, можно было бы обойтись такой программой: [pre2]print( 1000*999*998 - 1 )[/pre2]

Оксана71: Добрый день!! У меня та же проблема: разные ответы. Если использую @lru_cache, то ответ #997002000, а если import sys sys.setrecursionlimit( 10000 ), то ответ 997001999 Почему? Да, в этой задаче можно упростить вручную, но не все задачи такие. И sys.setrecursionlimit работает не на всех компьютерах. from functools import * @lru_cache(None) def f(n): if n==1: return 1 return n*f(n-1)-1 for n in range(1,1001): f(n) print(f(1000)/f(997))

s11kai: Оксана71 пишет: Добрый день!! У меня та же проблема: разные ответы. Если использую @lru_cache, то ответ #997002000, а если import sys sys.setrecursionlimit( 10000 ), то ответ 997001999 Почему? Попробуйте как-то так: [pre2] # способ 1 x = 1 for n in range(1000, 997, -1): x *= n print( x - 1 ) # способ 2 import sys sys.setrecursionlimit( 10000 ) def f( n ): return 1 if n == 1 else \ n*f(n-1) - 1 print( f(1000) // f(997) ) # способ 3 from functools import lru_cache @lru_cache def f( n ): return 1 if n == 1 else \ n*f(n-1) - 1 print( f(1000) // f(997) ) [/pre2] все три дают одинаковый ответ: 997001999 997001999 997001999




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