Форум программистов, компьютерный форум, киберфорум
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. Показов 3262. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 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
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru