Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 24

RecursionError: maximum recursion depth exceeded in comparison

07.05.2020, 22:28. Показов 3342. Ответов 9

Студворк — интернет-сервис помощи студентам
Всем добрый вечер
Возникли проблемы с задачей.
Условие:
Найдите аналитическое выражение для https://www.cyberforum.ru/cgi-bin/latex.cgi?{p}_{3}(n)

Вход программы состоит из единственной строки — списка из не более чем ста тысяч чисел https://www.cyberforum.ru/cgi-bin/latex.cgi?{n}_{i}\leq 2000000000

Выведите единственную строку — список значений https://www.cyberforum.ru/cgi-bin/latex.cgi?{p}_{3}({n}_{i}) , разделенных пробелом, для чисел из входа.

Sample Input:
1 3 5
Sample Output:
0 1 2


Я работаю в PyScripter и у него с данным кодом проблем нет. Однако на платформе, в которой дано это задание этот код не принимается с таким вот поясненим:

[I]Failed test #2 of 11. Runtime error

Traceback (most recent call last):
File "jailed_code", line 19, in <module>
print(int(p(A)),end=' ')
File "jailed_code", line 15, in p
a=p(n-1)+p(n-2)-p(n-4)-p(n-5)+p(n-6)
File "jailed_code", line 15, in p
a=p(n-1)+p(n-2)-p(n-4)-p(n-5)+p(n-6)
File "jailed_code", line 15, in p
a=p(n-1)+p(n-2)-p(n-4)-p(n-5)+p(n-6)
[Previous line repeated 994 more times]
File "jailed_code", line 6, in p
if n==0 or n==1 or n==2:
RecursionError: maximum recursion depth exceeded in comparison



Как это исправить?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
A=list(map(int,input().split()))
 
 
def p(n):
    if n==0 or n==1 or n==2:
        return 0
    if n==3 or n==4:
        return 1
    if n==5:
        return 2
    else:
        return  p(n-1) + p(n-2) - p(n-4) - p(n-5) + p(n-6)
 
for i in range(len(A)):
    print(int(p(A[i])),end=' ')
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2020, 22:28
Ответы с готовыми решениями:

RecursionError: maximum recursion depth exceeded in comparison
def F(n): if n &lt;= 5: return n if n &gt; 5 and n % 5 == 0: return n+F(n / 5 + 1) if n&gt;5 and n % 5 != 0: ...

Ошибка maximum recursion depth exceeded
здравствуйте, подскажите пжл, как с строки mylist = получить элементы строкой с элементом разделения '|'? делаю так: re_sub =...

RecursionError: maximum recursion depth exceeded
RecursionError: maximum recursion depth exceeded выводит при попытке запустить файл, подскажите где ошибка заранее благодарен вот сам...

9
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
07.05.2020, 22:33
Может они вам отрицательное число подают? По условию число меньше или равно 2 * 109. А про нижнюю границу ничего не сказано. А с отрицательным числом ваша функция уйдёт в бесконечную рекурсию.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
07.05.2020, 22:34
ну так у тебя для последнего варианта аж 5 раз рекурсивно вызывается функция
Цитата Сообщение от D303 Посмотреть сообщение
return  p(n-1) + p(n-2) - p(n-4) - p(n-5) + p(n-6)
можно лимит рекурсии увеличить, но не уверен что поможет
0
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
07.05.2020, 22:41
И ещё, используйте возможности языка по назначению. Цикл for предназначен для итерации по коллекциям.
Используйте его не так:
Python
1
2
for i in range(len(A)):
    print(int(p(A[i])),end=' ')
а так:
Python
1
2
for i in A:
    print(int(p(i)),end=' ')
Добавлено через 4 минуты
А что вообще за задача? Это всё условие?
0
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 24
08.05.2020, 00:59  [ТС]
Не подскажите, как это сделать?

Добавлено через 3 минуты
Да, это все условие. Разбиение числа на три слагаемых (порядок нам не важен)

Добавлено через 9 минут
Так, теперь ошибок нет. Но программа все равно не проходит 2 тест (в чемон заключается, я не знаю).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A=list(map(int,input().split()))
 
 
def p(n):
    if n==-n:
        return (n**2)//12
    if n==0 or n==1 or n==2:
        return 0
    if n==3 or n==4:
        return 1
    if n==5:
        return 2
    if n==6:
        return 3
    else:
        
        return  (n**2)//12
 
for i in A:
    print(int(p(i)),end=' ')
0
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
08.05.2020, 13:03
Цитата Сообщение от D303 Посмотреть сообщение
Да, это все условие. Разбиение числа на три слагаемых
На вход подаются три числа. На выходе тоже три. Так какое число надо разбить на слагаемые?
Объясните, пожалуйста, как вы понимаете задание, чтобы я тоже его понял.
0
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 24
08.05.2020, 13:30  [ТС]
На вход подается какое то количество чисел (в данном примере 3). И для каждого из них надо найти количество способов разбить его на 3 слагаемых (порядок нам не важен). И вывести количество разбиений для каждого из введеных чисед в строку
Пример разбиения числа 5: 1+1+3 , 1+2+2 - 2 способа
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
08.05.2020, 14:15
В этом решении дикая параллельная рекурсия. Отсюда и проблемы. Радикально они решаются применением накопительных параметров:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def p_bad(n):
    if n==0 or n==1 or n==2:
        return 0
    if n==3 or n==4:
        return 1
    if n==5:
        return 2
    else:
        return  p_bad(n-1) + p_bad(n-2) - p_bad(n-4) - p_bad(n-5) + p_bad(n-6)
 
def p_good(n,arr=[0,0,0,1,1,2]):
    if (n<=5):
        return arr[n]
    else:
        z=arr[5]+arr[4]-arr[2]-arr[1]+arr[0]
        return p_good(n-1,arr[1:]+[z])
 
print(p_good(22))
print(p_bad(22))
0
0 / 0 / 0
Регистрация: 28.07.2019
Сообщений: 24
08.05.2020, 14:30  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
В этом решении дикая параллельная рекурсия. Отсюда и проблемы. Радикально они решаются применением накопительных параметров:

Ваш код также не хочет обрабатывать большие числа (по условию, верхняя граница это 20000000)
Эту проблему мне удалось решить, используя явную формулу для таких разбиений ( [n^2/12] - целая часть)

Сейчас проблема в другом, программа, тестирующая код, на 2 тесте выдает ошибку. В чем заключается этот тест, я не знаю.

Вот код

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A=list(map(int,input().split()))
 
 
def p(n):
    if n==0 or n==1 or n==2:
        return 0
    if n==3 or n==4:
        return 1
    if n==5:
        return 2
    if n==-n:
        return  n**2//12
    else:
        return  n**2//12
 
for i in A:
    print(int(p(i)),end=' ')


Вот ссылка: https://stepik.org/lesson/11744/step/10?unit=2659
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
08.05.2020, 16:30
Цитата Сообщение от D303 Посмотреть сообщение
Эту проблему мне удалось решить, используя явную формулу для таких разбиений ( [n^2/12] - целая часть)
- я не занимался никакими разбиениями. Я имел дело только с кодом. Что он делает - не интересовался.

Добавлено через 14 минут
От рекурсии, кстати, легко отказаться. Но 20000000 циклов - это сильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2020, 16:30
Помогаю со студенческими работами здесь

[Sympy] RecursionError: maximum recursion depth exceeded
Второй час уже сижу, пытаюсь понять где я допустил ошибку... Может у кого-то это выйдет намного лучше чем у меня, если да, то буду...

Maximum recursion depth exceeded in comparison
Решил проверить время сортировки на разных по длине списках. При 10 и 100 элементах работает нормально. А при 1000 выдает: maximum...

При обработке строки выдаёт "maximum recursion depth exceeded"
Программа работает нормально для небольшой строки. При большой длине строки выдает ошибку: maximum recursion depth exceeded in cmp ...

RuntimeError: maximum recursion depth exceeded in cmp
При запуске сервера django вылазит ошибка RuntimeError: maximum recursion depth exceeded in cmp. Подскажите,пожалуйста,в чем дело и как ее...

Recursion depth of 1024 exceeded. >>
Не получается решить систему уравнений: s = NDSolve == -4 x, y' == -4 y + Cos}, x == y == 1, {x, y}, {t, 20}] Wolfram выдаёт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru