Recursividad

Solo disponible en BuenasTareas
  • Páginas : 5 (1164 palabras )
  • Descarga(s) : 0
  • Publicado : 16 de noviembre de 2010
Leer documento completo
Vista previa del texto
Recursividad

Existen muchas funciones matemáticas cuyos argumentos son números naturales, que pueden definirse de manera recursiva. Esto quiere decir que el valor de la función para el argumento n puede definirse en términos del argumento n-1 (o alguno anterior). En este tipo de definiciones siempre existirá un caso base a partir del cual parte la definición, el cual normalmente es el valorde la función en cero o en uno, aunque no necesariamente debe ser así.
Por ejemplo, el factorial puede definirse de manera recursiva de la siguiente manera:

Para definir una función en forma recursiva es necesario especificar:
* Caso(s) base: Donde la recursividad se detiene
* Paso de recursión: Como se define un elemento distinto del base, en términos de elementos anteriores.Usualmente los lenguajes de programación permiten definir funciones de manera recursiva. El lenguaje C es uno de ellos. La definición recursiva para el factorial sería:
int factorial(int n) {
if ((n == 0) || (n == 1))
return(1);
else
return(n*factorial(n-1));
}Normalmente las definiciones recursivas pueden expresarse en forma no recursiva. Sin embargo, dependiendo del caso, el resultado puede ser más confuso. Por ejemplo, una función en C que calcula el factorial en forma iterativa sería:
int factorial(int n) {
int i, fact = 1;

for (i=2; i<=n; i++)fact = fact * i;
return(fact);
}
Sin embargo, los algoritmos iterativos tienen una ventaja en cuanto al uso de memoria, si se comparan con los iterativos. La recursividad requiere que se guarde el estado de la ejecución antes de cada llamado recursivo, implicando un gasto considerable de memoria. Es probable que, por esta razón, las versiones recursivastengan mayores limitaciones al ejecutarse en un computador.
La aplicación de las definiciones recursivas puede ampliarse a una amplia gama de problemas, en los que la solución más natural puede ser la que se expresa de esta forma. Por ejemplo, para buscar un número en un vector podemos tener una función que reciba como argumento el vector, el rango de búsqueda y el número buscado. El prototipode esta función sería como:
int busqueda(int vec[], int inicio, int fin, int num);
La función que quiere hacer la búsqueda haría el llamado indicando los rangos apropiados para el vector:
resultado = busqueda(vector, 0, N, x);
La función busqueda( ) puede hacer su trabajo partiendo el vector en dos partes y llamándose a sí misma en forma recursiva, de lasiguiente manera:

res1 = busqueda(vec, inicio, fin-inicio/2, num);
res2 = busqueda(vec, (fin-inicio/2)+1, fin, num);
El caso base sería cuando el vector que recibe la función busqueda( ) contiene un único elemento. En este caso simplemente compara el elemento con el número buscado y retorna el valor apropiado.
Más adelante, en el capítulo sobreOrdenamiento y Búsqueda, se tratará en detalle este algoritmo que recibe el nombre de Búsqueda Binaria.

Ejemplo: Números de Fibonacci
La Sucesión de Fibonacci es una secuencia de números naturales, que empieza con 0 y 1, y cuyos siguientes términos están definidos como la suma de los dos anteriores:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

Algoritmo Recursivo
Es bastantesencillo y natural definir la Sucesión de Fibonacci en forma recursiva:

A partir de esta definición, se puede escribir una función en C que genere el término n-ésimo de la sucesión. En el siguiente ejemplo se presenta esta función, junto con un programa de prueba que pide un número entero al usuario y determina el correspondiente término de la sucesión.

Código en C para el ejemplo...
tracking img