sábado, 17 de abril de 2010

Algoritmos Recursivos

Los algoritmos recursivos son algoritmos que se encuentran encapsulados dentro de una función y generalmente necesitan ser llamados a si mismos dentro de la misma función para la resolución de un problema especifico. En otras palabras una función recursiva es aquella que contiene invocaciones a si misma.

Los algoritmos recursivos cuentan como mínimo con 2 partes básicas:
  1. Caso Base: Es un caso donde se encuentra una solución al problema sin necesidad de recurrir nuevamente al llamado de la función (recursión).

  2. Parte Recursiva: Brinda una solución al problema cada vez más cercana a la esperada; Sin embargo, necesita un nuevo llamado a la función para determinar otra posible solución.

La recursividad es una herramienta poderosa y a la vez peligrosa. Sin duda alguna la única ventaja que ofrece comparada a la iteración, es el ahorro de código, ya que es más sencillo volver a llamar una función ya creada que programar detalladamente el ciclo de repetición que le dará solución a un problema específico; Sin embargo solo se recomienda utilizar este tipo de algoritmo cuando utiliza pocos parámetros, variables e invocaciones.


Es importante mencionar que el diseño de un algoritmo de iteración llevará más trabajo para el programador; Sin embargo se puede contar que al final será un código más rápido, seguro y estable.

Ejemplo de los 2 Codigos:


El código a continuación mostrado representa los algoritmos de iteración y recursión de un préstamo, donde se utiliza la variable m para representar el monto, x para la tasa de interés y n el numero de periodos a calcular.


ITERATIVO


public float capital(float m, int n, float x)
{
if (n == 0)
{ return m; }
else
{
x = x / 100;
for (int b = n; b > 0; b--)
{m = m + (x * m);}
} return m;
}


RECURSIVO


public float capital(float m, int n, float x)
{

if (n == 0)
{ return m; }
else
{ return capital(m, n - 1, x) * (1 + (x/100)); }
}


REFERENCIAS:

http://www.programacionfacil.com/estructura_datos_csharp:transformacion_algoritmos_recursivos.htm
http://www.slideshare.net/demogorgon/algoritmos-recursivos
http://www.elcodigo.net/tutoriales/jsavanzado/jsavanzado4.html#punto3

1 comentario: