Форум программистов, компьютерный форум, киберфорум
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. Показов 3348. Ответов 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
38196 / 21129 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 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
38196 / 21129 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru