Vous êtes sur la page 1sur 3

RECURSIVIDAD:

Suelen responder a funciones que se definen en base a un caso menor de s mismas.


El factorial consiste multiplicar un nmero por todos los anteriores hasta llegar al 1.
De esta manera, por ejemplo, el factorial de 5 es 54321. Si nos fijamos, 4321
es el factorial de 4, es decir F(4), pero adems 321 es el factorial de 3F(3) y as
sucesivamente Cuando llegamos al 1, F(1) se calculara como 1 multiplicado por
todos los nmeros anteriores al 1 hasta llegar al 1, pero como ya estamos en el 1,
F(1)=1, sin multiplicarlo por nada ms, Al factorial de 1 le llamaremos caso base, y
directamente lo definiremos como 1
Diremos que el factorial de un nmero n es n multiplicado por el factorial del anterior,
es decir el factorial de n-1. Esto vale para todos los nmeros naturales positivos del dos
en adelante, pero no para el 1,

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;
}

Ahora con una funcin iterativa


static int FactIterativo(int n)
{
int resultado=1;
for (int i=n;i>=2;i--) {
resultado = resultado * i;
}
return resultado;
}

En la solucin recursiva, las variables se crean para cada llamada recursiva.

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
}

Ejercicios con recursividad


1. Programar un algoritmo recursivo que permita hacer la divisin
por restas sucesivas
int division (int a, int b)
{
if(b > a) return 0;
else
return division(a-b, b) + 1;
}
2. Programar un algoritmo recursivo que permita invertir un nmero.
Ejemplo: Entrada: 123 Salida: 321
int invertir (int n)
{
if (n < 10)
//caso base
return n;
else
return (n % 10) + invertir (n / 10) * 10;
}
3. Programar un algoritmo recursivo que permita sumar los dgitos
de un nmero. Ejemplo: Entrada: 123 Resultado:6
int sumar_dig (int n)
{
if (n == 0)
//caso base
return n;
else
return sumar_dig (n / 10) + (n % 10);
}

4. Programar un algoritmo recursivo que permita sumar los elementos


de un vector.
int suma_vec(int v [], int n)
{
if (n == 0)
return v [n];
else
return suma_vec(v, n - 1) + v [n];
}
5. Programar un algoritmo recursivo que calcule el Maximo comun
divisor de dos nmeros
int sacar_mcd(int a, int b) {
if(b==0)
return a;
else
return sacar_mcd(b, a % b);
}

Vous aimerez peut-être aussi