Автор | Сообщение |
|
Отправлено: 21.04.22 11:55. Заголовок: 3136 (вариант 373)
Подскажите,пожалуйста,что не так в решении. Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 3200000. Запишите в ответе сначала найденное значение n, а затем через пробел – соответствующую сумму выведенных чисел. В ответе N=46 . но если я подставляю 46, то у меня сумма числен всего 2187 Если увеличить интервал, то выдает ответ 1787 3200497 from functools import * @lru_cache(None) def F(n): global a a.append(n-5) if n > 1: a.append(n+8) F(n-2) F(n-3) return a a=[] for n in range(1,1000): F(n) if sum(a)>3200000: print(n,sum(a))
|
|
|
Ответов - 5
[только новые]
|
|
|
| Администратор
|
Сообщение: 3499
|
|
Отправлено: 21.04.22 14:41. Заголовок: Уберите кэширование...
Уберите кэширование. Для меня такой эффект оказался неожиданным... И массив тут не нужен: def F(n): global s s += n - 5 if n > 1: s += n + 8 F(n-2) F(n-3) for n in range(1,100): s = 0 F(n) if s > 3200000: print(n, s) break
|
|
|
|
Отправлено: 23.04.22 08:29. Заголовок: Без кэширования прог..
Без кэширования программа не работала корректно
|
|
|
|
Отправлено: 21.04.22 14:48. Заголовок: Ну вообще ничего нео..
Ну вообще ничего неожиданного. Состояние рекурсии не сохраняется в ней, а делегируется в глобальный список. В таком случае алгоритм сработает корректно только при полном прохождении по всем ветвям рекурсии. Вам нужно переписать рекурсию по другому. from functools import * @lru_cache(None) def F(n): s = n-5 if n > 1: s+= n+8 + F(n-2) + F(n-3) return s
|
|
|
|
Отправлено: 23.04.22 08:30. Заголовок: Поняла. Спасибо боль..
Поняла. Спасибо большое!
|
|
|
|
Отправлено: 27.04.22 10:21. Заголовок: Без кэшироваания выд..
Без кэшироваания выдает 11, с кэшированием ответ верный
|
|
|
|