2. 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. Para calcular 4!, por ejemplo, se puede utilizar
un proceso iterativo o uno recursivo.
De manera iterativa:
4! = 1 * 2 * 3 * 4 = 24
4. 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!
5.
6. 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.
7. 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.
8. 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.
9. 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.
10. 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.
11. 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?
12. 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
13.
14. 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.
15.
16. 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)
17. 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).
18. 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.).
19. 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.
21. 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
22.
23.
24.
25. 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.
25
26. Cuando un procedimiento incluye una
llamada a sí mismo se conoce como
recursión directa.
26
27. 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.
27