Académique Documents
Professionnel Documents
Culture Documents
F(1)=1
F(n)=nF(n-1)
Si n>1
Hay uno o varios casos de la funcin que se resuelven directamente. Son los casos base.
En el factorial, el caso base es cuando n=1, que directamente decidimos que es 1. El
resto de los casos, los definimos en funcin del un factorial "ms pequeo".
RESOLVIENDO EL FACTORIAL
Programar una funcin recursiva es sencillo. Observa este mtodo en C# para resolver
el factorial.
static int Factorial(int n)
{
int resultado;
if (n == 1)
//caso base
resultado = 1;
else
//otro caso
resultado = n * Factorial(n - 1);
return resultado;
}
EL DRAMA DE FIBONACCI
Nuevamente, la definicin en trminos recursivos de la sucesin de Fibonacci es muy
elegante y sencilla de entender:
-El primer y segundo trmino de la sucesin (n=1 y n=2) es 1
-Del tercero en adelante (n>2), es la suma de los dos trminos anteriores.
En un lenguaje un poquito ms matemtico...
fib(1)=1
fib(2)=1
fib(n)=fib(n-1)+fib(n-2)
cuando n>2
Por ejemplo, el trmino tercero (n=3) es la suma de los dos casos base, es decir, 2. El
cuarto es la suma del tercero (2) y el segundo (1), es decir, 3. El quinto es la suma del
cuarto (3) y del tercero (2), es decir, 5... y as sucesivamente.
Sin embargo, computacionalmente hablado, implementar la funcin de Fibonacci en
estos trminos recursivos no es tan elegante, aunque pudiera parecerlo.
static int fib(int n) {
int resultado;
if (n==1)
resultado=1;
else if(n==2)
resultado=1;
else
resultado=fib(n-1)+fib(n-2);
return resultado;
}
Esta funcin implementa esta solucin. (Tomada del artculo Sucesin de Fibonacci)
static int Fibonacci(int n)
{
if (n < 3) //los dos primeros terminos son 1
return 1;
else // a partir del tercero
{
int a = 1;
int b = 1;
int contador = 2;
int c;
do
{
contador++; //trmino que calcula esta iteracin
c = a + b; //calcular trmino
//preparo las variables para la prxima vuelta
a = b;
b = c;
} while (n != contador);
return c;
} //fin else
}