? Leí en un libro algorítmico que la función de Ackermann no puede ser recursiva por la cola (lo que dicen es "no se puede transformar en una iteración"). Estoy muy perplejo acerca de esto, así que probé y llegar a esto:¿Es esta implementación recursiva recursiva
let Ackb m n =
let rec rAck cont m n =
match (m, n) with
| 0, n -> cont (n+1)
| m, 0 -> rAck cont (m-1) 1
| m, n -> rAck (fun x -> rAck cont (m-1) x) m (n-1)
in rAck (fun x -> x) m n
;;
(Es OCaml/F # código).
Mi problema es que no estoy seguro de que esto sea recursivo en la cola. ¿Podrías confirmar que es? Si no, ¿por qué? Y, finalmente, ¿qué significa cuando la gente dice que la función de Ackermann no es recursiva primitiva?
Gracias!
Aún está creando una "pila" de llamadas a función cuando pasa esa lambda. –
Sí, es recursivo en la cola. Puede compilar el archivo con ocamlopt con la opción '-dlinear'. Esto debería ayudarlo a determinar si su función está utilizando llamadas de cola. – nlucaroni