Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Помощь с ошибкой maximum recursion depth exceeded питон

  1. Помощь с ошибкой maximum recursion depth exceeded питон

    Привет, ребят. Пишу скрипт на Python, и он постоянно выдает ошибку "maximum recursion depth exceeded". Как я понял, это происходит из-за чрезмерного использования рекурсии. Как можно обойти эту проблему или увеличить лимит глубины рекурсии? Может, кто-то сталкивался с таким?



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Да, это происходит, когда у тебя слишком много вложенных вызовов функции. В Питоне есть ограничение на глубину рекурсии, по умолчанию это 1000. Вот такой код можно использовать, чтоб увеличить лимит:

    Программный код:
    import sys

    sys
    .setrecursionlimit(1500
    Но будь осторожен, потому что слишком большое значение может вызвать крах программы, а лучше рассмотреть итеративное решение.

  4. Цитата Сообщение от Оксана Викторовна
    Да, это происходит, когда у тебя слишком много вложенных вызовов функции. В Питоне есть ограничение на глубину рекурсии, по умолчанию это 1000. Вот такой код можно использовать, чтоб увеличить лимит:

    Программный код:
    import sys

    sys
    .setrecursionlimit(1500
    Но будь осторожен, потому что слишком большое значение может вызвать крах программы, а лучше рассмотреть итеративное решение.
    Тоже пару раз вляпывался в такое, увеличишь лимит - потом снова ошибку ловишь. Итерация может спасти.

  5. Ну, это немного сурово, но заменяй рекурсивные функции на итеративные. Они могут быть чуть сложнее, но зато без крашей. Например:

    Программный код:

    def factorial
    (n):

        if 
    == 0:

            return 
    1

        
    else:

            return 
    factorial(n-1
    перепиши в

    Программный код:

    def factorial
    (n):

        
    result 1

        
    for i in range(1n+1):

            
    result *= i

        
    return result 

  6. Цитата Сообщение от Инга
    Ну, это немного сурово, но заменяй рекурсивные функции на итеративные. Они могут быть чуть сложнее, но зато без крашей. Например:

    Программный код:

    def factorial
    (n):

        if 
    == 0:

            return 
    1

        
    else:

            return 
    factorial(n-1
    перепиши в

    Программный код:

    def factorial
    (n):

        
    result 1

        
    for i in range(1n+1):

            
    result *= i

        
    return result 
    Во, четкая идея. Итерация в таких случаях лучше - стабильнее будет работать.

  7. Макс, проще поменяй подход. Вот пример на итерации для вычисления Фибоначчи:

    Программный код:

    def fib
    (n):

        if 
    <= 1:

            return 
    n

        a
    01

        
    for _ in range(2n+1):

            
    ab

        
    return 

  8. Цитата Сообщение от DoctorOctopus
    Макс, проще поменяй подход. Вот пример на итерации для вычисления Фибоначчи:

    Программный код:

    def fib
    (n):

        if 
    <= 1:

            return 
    n

        a
    01

        
    for _ in range(2n+1):

            
    ab

        
    return 
    Тоже про Фибоначчи хотел сказать. Сильно помогает такое переписывание, когда рекурсией перегружаешь.

  9. Понимаю, как бесит эта ошибка. Попробуй чекнуть свой алгоритм, может, можно оптимизировать его. Например, мемоизация помогает иногда:

    Программный код:

    def memoize
    (f)

        
    cache dict()

        
    def wrapper(x)

            if 
    x not in cache:

                
    cache[x] = f(x)

            return 
    cache[x]

        return 
    wrapper

    @memoize

    def factorial
    (n):

        return 
    factorial(n-1) if else 

  10. Цитата Сообщение от Екатерина Андреевна
    Понимаю, как бесит эта ошибка. Попробуй чекнуть свой алгоритм, может, можно оптимизировать его. Например, мемоизация помогает иногда:

    Программный код:

    def memoize
    (f)

        
    cache dict()

        
    def wrapper(x)

            if 
    x not in cache:

                
    cache[x] = f(x)

            return 
    cache[x]

        return 
    wrapper

    @memoize

    def factorial
    (n):

        return 
    factorial(n-1) if else 
    Полностью согласен, мемоизация помогает срезать углы по вычислительным нагрузкам - спасала не раз.

Страница 1 из 2 12 ПоследняяПоследняя