sábado, 4 de agosto de 2012

Problema de Recursión (Los Conejos de Fibonacci)

Ya estamos de Regreso después de unas merecidas Vacaciones. Así  que empezamos a publicar nuevamente.
Alguien compra una pareja de conejos(un macho y una hembra), luego de un mes de haber hecho la compra esos conejos son adultos, después de dos meses de haber hecho la compra esa pareja de conejos da a luz a otra pareja de conejos(un macho y una hembra), al tercer mes, la primera pareja de conejos da a luz a otra pareja de conejos y al mismo tiempo, sus primeros hijos se vuelven adultos.Cada mes que pasa, cada pareja de conejos adultos da a luz a una nueva pareja de conejos, y una pareja de conejos tarda un mes en crecer. Escribe una función que regrese cuántos conejos adultos se tienen pasados n meses de la compra.

Solución Sea F(x) el número de parejas de conejos adultos pasados x meses. Podemos ver claramente que pasados 0 meses hay 0 parejas adultas y pasado un mes hay una sola pareja adulta. Es decir F(0) = 0 y F(1) = 1. Ahora, suponiendo que para alguna x ya sabemos F(0), F(1), F(2), F(3),
:::, F(x -1), en base a eso ¾cómo podemos saber el valor de F(x)? Si en un mes se tienen a parejas jóvenes y b parejas adultas, al siguiente mes se tendrán a + b parejas adultas y b parejas jóvenes. Por lo tanto, el número de conejos adultos en un mes n, es el número de conejos adultos en el mes n-1 más el número de conejos jóvenes en el mes n-1.Como el número de conejos jóvenes en el mes n-1 es el número de conejos adultos en el mes n-2, entonces podemos concluir que:
F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n -2) 
El siguiente código en C muestra una implementación de una función recursiva para resolver el problema planteado por Fibonacci:

int F( int n) {
   i f (n==0){
          return 0 ;
               } el se i f (n==1)
 {
            return 1 ;
     }
        el se {
     return F(n-1)+F(n-2) ;
  
  }

        } 
Si corres el código anterior en una computadora, te darás cuenta que el tamaño de los números crece muy rápido y con números como 39 o 40 se tarda mucho tiempo en responder, mientras que con el número 50 parece nunca terminar.
Hemos resuelto de manera teórica el problema de los conejos de Fibonacci,sin embargo esta solución es irrazonablemente lenta.
Como curiosidad matemática, posiblemente alguna vez leas u oigas hablar sobre la sucesión de Fibonacci, cuando suceda, ten presente que la sucesión de Fibonacci es
F(0); F(1); F(2); F(3); F(4); F(5); :::
O escrita de otra manera:
0; 1; 1; 2; 3; 5; 8; 13; 21; 34; 55; :::
Además de servir como solución a este problema, la serie de Fibonacci cumple también con muchas propiedades interesantes que pueden servir para resolver o plantear otros problemas.


1 comentario: