Said Muñoz Chávez
PreguntaHola, me ayudan con este error?
.
Factoial Iterativo: 0.03124260902404785
Traceback (most recent call last):
File “C:\Users\saidm\Downloads\strings.py”, line 19, in factorial_r
return (n * factorial_r(n-1))
File “C:\Users\saidm\Downloads\strings.py”, line 19, in factorial_r
return (n * factorial_r(n-1))
File “C:\Users\saidm\Downloads\strings.py”, line 19, in factorial_r
return (n * factorial_r(n-1))
[Previous line repeated 997 more times]
MemoryError: Stack overflow
[Finished in 0.145s]
.
.
Las especificaciones de mi compu están aqui:
https://drive.google.com/file/d/1B1QDSQLDGSnISkkRKY9EMUgQ8Tb-nDlg/view?usp=sharing
.
.
Mi código es este:
import time import sys sys.setrecursionlimit(10**5 ) def factorial(n): resp = 1 while n > 1: resp *= n n -= 1 return resp def factorial_r(n): if n == 1: return 1 return (n * factorial_r(n-1)) if __name__ == "__main__": n = 8000 ini = time.time() factorial(n) fin = time.time() print(f"Factoial Iterativo: {fin - ini}") ini = time.time() factorial_r(n) fin = time.time() print(f"Factoial Recursivo: {fin - ini}")
Said Muñoz Chávez
Pues ya instale python de 64 bits y nada, en PyCharm me da esto:
Factoial Iterativo: 0.005984067916870117
Process finished with exit code -1073741571 (0xC00000FD)
y ya actualicé mi código para que ahora inicie así:
import time import sys
sys.setrecursionlimit(50000)

Luis Lira
@Saidmc es un caso curioso, si lo ejecuto en mi PC simplemente no corre esa parte del script pero no me lanza ningún error. Mi PC tiene un Ryzen 5 3400G y 16Gb de Ram.
¿Instalaste el Python de 32 o el de 64 bits? Por lo que leí, el Python de 32 bits sólo puede acceder a 4GB de Ram,
Said Muñoz Chávez
ya lo tiene mi código sys.setrecursionlimit(10**5 )

Luis Lira
Hola @Saidmc, es error es debido a que Python por defecto sólo permite realizar un aproximado de 1000 iteraciones de manera recursiva, luego de eso falla automáticamente para evitar algún problema. Hay una forma de cambiar ese límite, sólo debes importar el módulo
sys
setrecursionlimit
import sys
sys.setrecursionlimit(50000)