En la preparación de un examen, estaba estudiando a Haskell. Por lo tanto, estaba resolviendo una vieja tarea en la que había que definir la serie de fibonacci. Después de resolver la tarea (ver 1] para el código fuente) y revisando el resultado, encontré un artefacto bastante interesante. Corriendo
$ ghci Fibonacci.hs
...
*Fibonacci> fibonacci
produjo esto:
Los separadores de la lista infinita de números de fibonacci formaban una parábola. Para hacer esto más visible, cambié un poco el código para que los números no se superpongan al artefacto (ver 2] para el código fuente). Aquí está la parábola extraída de la primera imagen: (Para más imágenes, ver 3] )
$ ghci Fibonacci.hs
...
*Fibonacci> highlightArtifact fibonacci
Observación
Es interesante que todas las zarandas de la lista forman una parábola de alguna manera (aunque el vértice no siempre es visible). No podía dejar de pensar en esto y me pregunté por qué sucede esto. Se puede descartar una coincidencia, porque los artefactos son visibles en todas partes cuando se desplaza a través de la salida (al menos al principio, después de un tiempo los números se hacen demasiado grandes) y al redimensionar la ventana terminal los hace crecer. Algunos superan la ventana terminal, pero se formarán nuevas parábolas.
Explicación (Un intento)
Dado que la ecuación para (al menos una parte de) una parábola como esa es $f(x) = \sqrt {x}$ (coeficientes y partes constantes excluidas, por lo tanto, asintóticamente), asumí, que este crecimiento debe ser encontrado en algún lugar de la serie de fibonacci, también. La velocidad en la que los números crecen en longitud debe ser descriptible con una función de la forma $ \sqrt {x}$ . Pero esto sólo explicaría la parte superior de la parábola, y no la parte inferior (debajo del vértice, es decir $f(x) = - \sqrt {x}$ ).
Preguntas
Asumiendo que voy en la dirección correcta: ¿Cómo se puede describir esto completamente?
Si no: ¿Cómo sería una explicación adecuada? ¿Cuál es su enfoque?
En cualquier caso: ¿Cómo se puede probar la explicación?
Apéndice
1] El código original donde descubrí el artefacto
-- Fibonacci.hs
module Fibonacci where
fibonacci :: [Integer]
fibonacci = 0 : 1 : zipWith (+) fibonacci (tail fibonacci)
2] El código modificado para extraer el artefacto
-- Fibonacci.hs
module Fibonacci where
fibonacci :: [Integer]
fibonacci = 0 : 1 : zipWith (+) fibonacci (tail fibonacci)
highlightArtifact :: [Integer] -> String
highlightArtifact (l : list) = (hideString (show l)) ++ "*" ++ (highlightArtifact list)
hideString :: String -> String
hideString "" = ""
hideString (c : string) = " " ++ hideString string
3] Más fotos