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

Тема: Как убрать лимит рекурсии python в скрипте для глубоких вычислений?

  1. Как убрать лимит рекурсии python в скрипте для глубоких вычислений?

    Привет, ребят! Столкнулся с проблемой при написании скрипта на питоне, который использует глубокую рекурсию. По умолчанию стоит лимит на количество рекурсий, и у меня программа валится с ошибкой 'RecursionError: maximum recursion depth exceeded'. Кто знает, как убрать лимит рекурсии python или хотя бы увеличить его? Желательно с практическими примерами, буду супер признателен за любую помощь!



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

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

  3. Ну смотри, бро! Лимит рекурсии в Python можно подвинуть с помощью модуля `sys`. Для этого надо импортировать `sys` и установить новый лимит рекурсии через функцию `setrecursionlimit`. Вот пример:

    Программный код:
      import sys
      sys
    .setrecursionlimit(2000)  # увеличиваем лимит до 2000
      
      
    def rec_func(n):
          if 
    == 0:
      return 
    0
          
    return rec_func(n-1)
      
      print(
    rec_func(1999)) 
    Только аккуратнее, потому что увеличивая лимит, можно получить сегфолт, если памяти не хватит. Лучше поднимай постепенно и тестируй!

  4. Цитата Сообщение от Денетор
    Ну смотри, бро! Лимит рекурсии в Python можно подвинуть с помощью модуля `sys`. Для этого надо импортировать `sys` и установить новый лимит рекурсии через функцию `setrecursionlimit`. Вот пример:

    Программный код:
      import sys
      sys
    .setrecursionlimit(2000)  # увеличиваем лимит до 2000
      
      
    def rec_func(n):
          if 
    == 0:
      return 
    0
          
    return rec_func(n-1)
      
      print(
    rec_func(1999)) 
    Только аккуратнее, потому что увеличивая лимит, можно получить сегфолт, если памяти не хватит. Лучше поднимай постепенно и тестируй!
    Йоу, красава! Редкого поймать сегфолт вообще не прёт, так что ты прав. 2000 - вообще нормальный амбиент.

  5. Здарова, ну ещё можно юнит-тестами сразу проверить, чтобы понять, насколько вообще лимит надо поднимать. Скромное увеличение может спасти тебя от оверфловов.

  6. Цитата Сообщение от EchoSleuth
    Здарова, ну ещё можно юнит-тестами сразу проверить, чтобы понять, насколько вообще лимит надо поднимать. Скромное увеличение может спасти тебя от оверфловов.
    Ты прав! Юнит-тесты - тема, правда лишние траблы в код вносят если не ловко всё настроить.

  7. Если проект реально крупный, ещё можно подумать об оптимизации самой функции. Например, можно переписать её в итеративную версию, чтобы чекать рекурсов меньше.

    Программный код:
      def iter_func(n):
          
    total 0
          
    for i in range(n+1):
      
    total += i
          
    return total
      
      
    print(iter_func(1999)) 

  8. Цитата Сообщение от MaxRiver
    Если проект реально крупный, ещё можно подумать об оптимизации самой функции. Например, можно переписать её в итеративную версию, чтобы чекать рекурсов меньше.

    Программный код:
      def iter_func(n):
          
    total 0
          
    for i in range(n+1):
      
    total += i
          
    return total
      
      
    print(iter_func(1999)) 
    Хороший подход для крупных задач, меньше багов будет, особенно на проде!

  9. Ещё есть такая штука, как tail recursion optimization, но в питоне это не поддерживается напрямую. Так что то, что написал, самое это!

  10. Цитата Сообщение от LeoForest
    Ещё есть такая штука, как tail recursion optimization, но в питоне это не поддерживается напрямую. Так что то, что написал, самое это!
    Да уж, жаль, что в питоне прямой tail оптимизации нет, но спасибо за инфу, бро!

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