Universidad Andina Del Cusco
Universidad Andina Del Cusco
Universidad Andina Del Cusco
recursividad en programación
Programación Recursiva:
Es mucho más difícil desarrollar una solución recursiva en un lenguaje determinado para
resolver un problema específico cuando no se tiene un algoritmo. No es solo el programa
sino las definiciones originales y los algoritmos los que deben desarrollarse. En general,
cuando encaramos la tarea de escribir un programa para resolver un problema no hay razón
para buscar una solución recursiva. La mayoría de los problemas pueden resolverse de una
manera directa usando métodos no recursivos. Sin embargo, otros pueden resolverse de una
manera más lógica y elegante mediante la recursión.
El ejemplo más típico de algoritmo recursivo es el de una función para calcular la factorial
de un número. La factorial de un número es el resultado de multiplicar dicho número por
todos los precedentes, hasta llegar a 1. Por ejemplo, factorial (3) = 3 * 2 * 1. Si observamos
que la factorial de un número es equivalente al producto de dicho número por la factorial del
número precedente: factorial (3) = 3 * factorial (2) podemos plantear una implementación
recursiva: función factorial(n) si n = 1 d sino ev ol ve r 1 devolver n * factorial (n – 1) fin
si fin función En este caso, la sentencia si n = 1 devolver 1 es la condición de salida o caso
base que evita que la función se llame a sí misma indefinidamente.
La pila de llamadas
Todo programa en ejecución tiene una pila asociada para éste propósito. En los lenguajes de
alto nivel (como C o Java) la gestión de la pila de llamadas la realiza de forma automática el
compilador, y el programador no necesita preocuparse de su funcionamiento. Cuando en un
punto concreto de un programa se llama a una función -sea recursiva o no- se reserva espacio
en la pila para la siguiente información
Llamadas recursivas
Listas enlazadas
En una estructura del tipo lista enlazada cada nodo contiene una referencia al siguiente nodo
(alternativamente es posible que contenga una referencia al nodo anterior, en las listas
doblemente encadenadas), y un conjunto de atributos extra específicos del nodo en cuestión
Una función que opere de forma recursiva sobre una lista enlazada, deberá procesar el nodo
actual y pasar como parámetro el nodo siguiente. La condición de salida en este caso se dará
cuando lleguemos a un nodo de valor null, que indicará el final de la lista