Tuve una tarea en la escuela la semana pasada para implementar una función para calcular el n-ésimo número en la secuencia de fibonacci. Una 'subasignación' consistía en implementarla usando la acumulación (podría no ser una traducción correcta) para dar a la función O (n) complejidad de tiempo. Todo funcionó bien hasta que intenté hacer la función (Int -> Entero). Experimentando un poco me di cuenta de que la complejidad del tiempo estaba cerca de O (n^2) para números realmente grandes. Se me ocurre que esto debe ser debido a la implementación de entero, lo que me hace un poco curioso sobre cómo funciona. Hice algunas búsquedas en Google y no encontré nada que pareciera útil, así que me dirijo a ustedes con la esperanza de obtener una explicación o un enlace que lo explique a fondo.Complejidad del tiempo entero en Haskell
Mi código:
ackfib 0 = 0
ackfib 1 = 1
ackfib n = loop n 1 0 1
where
loop n n1 n2 i
| i < n = loop n (n1+n2) n1 (i+1)
| i == n = n1
| i > n = error "n must be greater than or equal to 0"
Estoy agradecido por todas las respuestas
Viktor
Como suele ser el caso, publique su código. – Juliet
Esto no se trata de mi código, se trata de la implementación del tipo Entero. – vichle
No podemos elaborar ninguna explicación sin ver toda la imagen. Que en este caso, es tu código. – Juan