sucesion sintaxis reglas recursividad recursiva potencia numero mayor algoritmos python recursion platform

python - reglas - sintaxis de recursividad



Python: ¿Cuál es el límite de recursión difícil para Linux, Mac y Windows? (3)

En Windows (al menos), sys.setrecursionlimit no es la historia completa. El límite estricto es por subproceso y necesita llamar a threading.stack_size y crear un nuevo subproceso una vez que alcanza un cierto límite. (Creo que 1MB, pero no estoy seguro). He usado este enfoque para aumentarlo a una pila de 64MB.

import sys import threading threading.stack_size(67108864) # 64MB stack sys.setrecursionlimit(2 ** 20) # something real big # you actually hit the 64MB limit first # going by other answers, could just use 2**32-1 # only new threads get the redefined stack size thread = threading.Thread(target=main) thread.start()

No he intentado ver qué límites puede haber en threading.stack_size , pero siéntete libre de probar ... ahí es donde debes mirar.

En resumen, sys.setrecursionlimit es solo un límite impuesto por el intérprete mismo. threading.stack_size permite manipular el límite real impuesto por el sistema operativo. Si tocas el último límite primero, Python simplemente se bloqueará por completo.

El módulo sys de Python proporciona una función setrecursionlimit que le permite cambiar el límite máximo de recursión de Python. Los documentos dicen:

El límite más alto posible depende de la plataforma.

Mi pregunta es: ¿Cuál es el límite más alto posible para varias plataformas, bajo CPython? Me gustaría saber los valores para Linux, Mac y Windows.

ACTUALIZACIÓN: ¿Podemos evitar las respuestas "Lo estás haciendo mal"? Sé que tratar de hacer recursiones muy profundas suele ser una mala idea. He considerado los pros y los contras en mi situación específica y decidí que quiero hacerlo.


No debe abusar de las llamadas recursivas en CPython. No tiene optimización de cola, las llamadas a función usan mucha memoria y tiempo de procesamiento. Es posible que esos límites no se apliquen a otras implementaciones, no están en los planos.

En CPython, la recursión está bien para atravesar estructuras de datos (donde un límite de 1000 debería ser suficiente para todos) pero no para algoritmos. Si tuviera que implementar, digamos, algoritmos relacionados con gráficos y alcanzar el límite de recursión, implementaría mi propia pila y usaría iteraciones, o buscaría bibliotecas implementadas en C / C ++ / lo que sea antes de aumentar el límite manualmente.


  • Para Windows: 2000
  • Para Linux: 2147483647 (2 ^ 31 - 1)
  • Para Mac, en mi MacBook Pro el límite predeterminado es: 1000