2. Definición
• Cualquier proceso puede ser definido de
forma iterativa y de forma recursiva.
– ������ Un proceso iterativo es aquél que
requiere de la repetición explícita de cierta
acción.
– ������ Un proceso es recursivo si está definido
total o parcialmente en términos de sí mismo.
3. Ejemplo Matrushka
• La Matrushka es una artesanía tradicional rusa.
Es una muñeca de madera que contiene otra
muñeca más pequeña dentro de sí. Esta
muñeca, también contiene otra muñeca dentro.
Y así, una dentro de otra.
3
4. • Para calcular 4!, por ejemplo, se puede
utilizar un proceso iterativo o uno
recursivo.
• De manera iterativa:
• 4! = 1 * 2 * 3 * 4 = 24
5. • Para definir 4! de manera recursiva se
tiene que definirlo en términos de factorial,
es decir, en la definición (parte derecha de
la igualdad) tiene que aparecer el factorial.
• De manera recursiva:
»4! = 4 * 3!
6.
7. • Se observa que en el cálculo de 4! fue
muy importante el hecho de que 0! es
igual a 1 ¿Qué hubiera pasado si 0! se
calculará como se calculó los demás
factoriales? Nunca se hubiera terminado
el proceso, o sea, tendríamos un proceso
infinito.
8. • Entonces, toda definición recursiva debe
tener, al menos, una definición base.
Esta definición base proporciona la
solución de salida de la recursividad.
9. • Para calcular 4!, 3!, 2! y 1! Se uso una
definición recursiva, por lo que se
estuvo entrando en recursión y cuando se
alcanzó la definición base se comenzó a
salir de recursión.
11. • Conclusiones:
– Un proceso es recursivo si está definido total
o parcialmente es términos de sí mismo.
– Todo proceso recursivo debe tener, al
menos: una definición base y una definición
recursiva.
12. Diseño e implementación de algoritmos
recursivos.
• La solución recursiva a un problema de
repetición se obtiene respondiendo dos
preguntas:
– 1. ¿Cómo se resuelve el caso más pequeño
del problema?
– La respuesta a esta pregunta debe ser no-
recursiva y plantear una condición de salida,
es decir, proporcionar la definición base.
13. • En el cálculo de factorial, la pregunta
sería: ¿cuál es el número más pequeño
para el que se puede obtener factorial?
• 2. ¿Cómo se resuelve un caso general del
problema, sabiendo que ya se tiene el
caso anterior más pequeño?
14. • De tal forma que, la definición recursiva de
n! es:
– a) n! = 1 si n = 0 ������ Definición base
– b) n! = n * (n – 1)! si n > 0 ������ Definición
recursiva
15.
16. • Dependiendo del problema que
implemente el módulo éste diagrama se
puede ver modificado.
• Por ejemplo, si tiene más de una
definición base, si tiene más de una
definición recursiva o si en la solución
recursiva tiene que realizar alguna
operación antes de volverse a ejecutar o
no.
18. La importancia del return en una función
• 1o. Hace que la función tome el valor de lo
que se está regresando. En factorial: si n
== 0 factorial = 1 sino factorial= n *
factorial(n – 1)
19. • 2o. Termina la ejecución de la función,
regresando el control de la ejecución al
módulo en que fue llamada (a la
instrucción que se debe ejecutar después
de que la función fue llamada).
20. Conclusiones
• La solución recursiva de un problema se obtiene
respondiendo dos preguntas: ¿cómo se
resuelve el caso más pequeño? y ¿cómo se
resuelve un caso general, sabiendo que ya se
tiene el caso anterior más pequeño?
• Para implementar soluciones recursivas se
utilizan los módulos: las funciones (int, float,
double, etc.).
21. • El return de una función realiza dos
operaciones: asigna a la función el valor que
regresa y termina la ejecución de la misma,
regresando el control a la siguiente instrucción
que se tiene que realizar, después de la llamada
a la función.
23. • Considerar un ejemplo más, la serie de los
números de Fibonacci cuya definición ya
se nos da de manera recursiva. Vamos a
escribir su implementación y
posteriormente haremos la representación
de la pila.
– F0 = 1
– F1 = 1
– Fn = Fn -1 + Fn – 2 si n > 1
24.
25.
26.
27. ¿Cuándo usar recursividad?
• Para simplificar el código.
• Cuando la estructura de datos es recursiva
ejemplo : árboles.
¿Cuándo no usar recursividad?
• Cuando los métodos usen arreglos largos.
• Cuando el método cambia de manera
impredecible de campos.
• Cuando las iteraciones sean la mejor opción.
27
28. Algunas Definiciones.
• Cuando un procedimiento incluye una
llamada a sí mismo se conoce como
recursión directa.
28
29. Algunas Definiciones.
• Cuando un procedimiento llama a otro
procedimiento y éste causa que el
procedimiento original sea invocado, se conoce
como recursión indirecta.
NOTA: Cuando un procedimiento recursivo se llama recursivamente a
si mismo varias veces, para cada llamada se crean copias
independientes de las variables declaradas en el procedimiento.
29