Hola a todos.
Respecto a la sucesion de fibonacci.
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229.....
Para calcular la sucesión hay varias posibilidades. La más instructiva desde el punto de vista de la programación creo que es mediante la recursividad.
(Siempre en todo problema la solución más eficiente es aquella que tiene coste constante, solución que expongo más abajo).
El número de fibonacci se calcula como
f(1)=1 caso base
f(2)=1 caso base
f(n)=f(n-1)+f(n-2) caso recursivo
La verdad es que hace mucho tiempo que no me veo en la necesidad de utilizar la recursividad y para ser sinceros este va a ser mi primera función recursiva en perl

espero que este bien 8D
- Código: Seleccionar todo
sub fibo
{
my $n=@_[0];
if ($n==0){return 1;}
else
{
if ($n==1){return 1;}
else
{
return( fibo($n-1)+fibo($n-2) );
{
}
}
Ahora bastaria (por ejemplo) con crear un bucle que guarde los resultados de cada número en un vector y los muestre por pantalla.
Mediante la recursividad si se pretenden calcular los 100 primeros números y mostrarlos por pantalla veremos que el ordenador tarda un poco en mostrar el resultado.
Si se pretenden mostrar los 101 primeros de la sucesión al trabajar con números cada vez más grandes el tiempo se incrementa de forma exponencial

También existe la solución a esta sucesión con coste de ejecución constante, por lo tanto más eficiente.
Consiste en crear un vector con tantas posiciones como números queramos calcular (en Perl con crearlo basta XD )
En las dos primeras posiciones ponemos los dos casos base (dos unos).
Y el resto los calculamos modificando la función del caso recursivo.
(¡¡¡cada valor es igual a la suma de sus dos anteriores!!!)
- Código: Seleccionar todo
$num= cantidad de números que se quieren calcular de la serie;
@fibo=('1','1');
for (my $i=2;$i=$num;$i++)
{
$fibo[$i]=$fibo[$i-1]+$fibo[$i-2];
}
$"=',';
print @fibo;
De hecho con esta función se pueden calcular muchísimos números de la sucesión de fibonacci, mientras que con la versión recursiva además de tardar más es muy probable que suceda un error de desbordamiento interno de pila

Espero que esto sirva para activar las neuronas y le sea útil a alguien.
(KIDD creo que si pones esto un poco mejor explicado y algún ejemplo más como el cálculo del factorial en un tutorial sobre recursividad recibiría muchas visitas).
Un saludo
MAC.