he escrito Collatz conjeturas en el Esquema:¿Por qué es la conjetura de Collatz recursiva de la cola que causa el desbordamiento de la pila en Scheme?
(define C
(lambda (n)
(cond
((eq? n 1) 1)
((even? n) (C (/ n 2)))
(else (C (+ (* n 3) 1))))))
Esta es una llamada recursiva de cola, pero me sale desbordamiento de pila cuando llamo (C 121):
guile> (trace C)
(C)
guile> (C 121)
[C 121]
[C 364]
[C 182]
[C 91]
[C 274]
[C 137]
[C 412]
[C 206]
[C 103]
[C 310]
[C 155]
[C 466]
[C 233]
[C 700]
[C 350]
[C 175]
[C 526]
[C 263]
[C 790]
[C 395]
[C 1186]
ERROR: Stack overflow
ABORT: (stack-overflow)
¿Por qué es adecuado recursión de cola causando un desbordamiento? Como puede ver, estoy usando Guile como intérprete de Scheme (versión 1.8.7).
¿Qué sucede cuando no se rastrea la llamada a la función? ¿Qué sucede cuando usas otro sistema de esquema? – knivil
Deshabilitar el rastreo no ayuda. Raqueta está bien con el ejemplo dado. –
Esto podría ser un error: esa definición parece recursiva a la cola. (Sin embargo, la mayoría de las bibliotecas de rastreo destruirán la recursividad de cola). –