El tercer reto de programación consiste en crear un método que imprima los primeros 50 números de la sucesión de Fibonacci. ¿Pero qué es la sucesión de Fibonacci?
En matemáticas, la sucesión o serie de Fibonacci es la siguiente sucesión infinita de números naturales:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597…
La sucesión comienza con los números 0 y 1, a partir de estos, «cada término es la suma de los dos anteriores», es la relación de recurrencia que la define.
A los elementos de esta sucesión se les llama hijos de Fibonacci. Esta sucesión fue descrita en Europa por Leonardo de Pisa, matemático italiano del siglo xiii también conocido como Fibonacci. Tiene numerosas aplicaciones en ciencias de la computación, matemática y teoría de juegos. También aparece en configuraciones biológicas, como por ejemplo en las ramas de los árboles, en la disposición de las hojas en el tallo, en las flores de alcachofas y girasoles, en las inflorescencias del brécol romanesco, en la configuración de las piñas de las coníferas, en la reproducción de los conejos y en cómo el ADN codifica el crecimiento de formas orgánicas complejas. De igual manera, se encuentra en la estructura espiral del caparazón de algunos moluscos, como el nautilus.
Wikipedia
El enunciado del reto reza lo siguiente:
/*
* Escribe un programa que imprima los 50 primeros números de la sucesión
* de Fibonacci empezando en 0.
* - La serie Fibonacci se compone por una sucesión de números en
* la que el siguiente siempre es la suma de los dos anteriores.
* 0, 1, 1, 2, 3, 5, 8, 13...
*/
Y la solución quedaría del siguiente modo:
<?php
declare(strict_types=1);
function printFibonacci(): array
{
$number1 = 0;
$number2 = 1;
$numbers = [];
for ($i = 0; $i < 50; $i++) {
$numbers[] = $number1;
$next = $number1 + $number2;
$number1 = $number2;
$number2 = $next;
}
return $numbers;
}
// Test
echo implode(', ', printFibonacci());
Lo que he hecho es almacenar en un array los valores de la sucesión, para finalmente imprimirlos separados por coma a través de implode.
Simplemente utilizamos un bucle for para hacer 50 repeticiones donde almacenamos el número 1, y después hacemos la suma de los dos números, almacenando el número 2 como el número 1, y la suma obtenida como el número 2 para la siguiente iteración.
También puedes verlo en GitHub.