Clase 09 Recursion

23
Fundamentos de programación Recursividad By Adolfo Jiménez 2015 UNA – PUNO

description

Recursion en programas de c++,es donde te indica que la recursion en procesos de programacion

Transcript of Clase 09 Recursion

Page 1: Clase 09 Recursion

Fundamentos de

programación

Recursividad By Adolfo Jiménez

2015

UNA – PUNO

Page 2: Clase 09 Recursion
Page 3: Clase 09 Recursion
Page 4: Clase 09 Recursion

Para entender la

recursividad primero hay

que entender la

recursividad.

Page 5: Clase 09 Recursion
Page 6: Clase 09 Recursion

Definición

Una función es recursiva cuando se define en

función de si misma.

Es una función que se llama a si misma.

técnica de programación que nos permite que

un bloque de instrucciones se ejecute n veces.

Remplaza en ocasiones a estructuras

repetitivas.

Page 7: Clase 09 Recursion

Divide y vencerás

Consiste en dividir un problema M en una serie

de problemas menores de tamaño K.

Una vez resuelto cada uno de los sub problemas, hemos de fusionar los resultados parciales obtenidos, para

resolver el problema general.

Page 8: Clase 09 Recursion

Aplicaciones de la recursividad

Algoritmos de ordenación como quick sort.

Solución de problemas de inteligencia artificial.

Resolución del problema de las torres de Hanoi.

Resolución del problema de las ocho damas

sobre el tablero de ajedrez.

Aplicaciones sobre árboles y listas.

Page 9: Clase 09 Recursion

Inconvenientes de la recursividad

Al realizar muchas llamadas, se produce un

desbordamiento de la pila (stack overflow), es

decir, agotamos nuestro espacio de la pila.

Cada llamada a la función recursiva ocupa un

espacio en la pila o memoria dinámica.

Page 10: Clase 09 Recursion

¿Cómo funciona la recursividad?

Se debe tener una o más condiciones base

para saber cuando hay que parar.

Se tienen varios parámetros de entrada con los

que se va a trabajar en las condiciones base.

Finalmente se tienen varias operaciones a

realizar. La función que estamos definiendo será

resuelta al llamarse a sí misma con parámetros

nuevos, de lo contrario entrará en un ciclo

infinito.

Page 11: Clase 09 Recursion

La pila de recursión

La memoria del ordenador se divide (de manera lógica, no física) en varios segmentos (4):

Segmento de código: Parte de la memoria donde se guardan las instrucciones del programa en cod. Máquina.

Segmento de datos: Parte de la memoria destinada a almacenar las variables estáticas.

Montículo: Parte de la memoria destinada a las variables dinámicas.

Pila del programa: Parte destinada a las variables locales y parámetros de la función que está siendo ejecutada.

Page 12: Clase 09 Recursion

Llamada a una función

Se reserva espacio en la pila para los parámetros

de la función y sus variables locales.

Se guarda en la pila la dirección de la línea de

código desde donde se ha llamado a la función.

Se almacenan los parámetros de la función y sus

valores en la pila.

Al terminar la función, se libera la memoria asignada en la pila y se vuelve a la instruc. Actual.

Page 13: Clase 09 Recursion

Llamada a una función recursiva

En el caso recursivo, cada llamada genera un nuevo

ejemplar de la función con sus correspondientes objetos

locales:

La función se ejecutará normalmente hasta la

llamada a sí misma. En ese momento se crean en la

pila nuevos parámetros y variables locales.

El nuevo ejemplar de función comienza a ejecutarse.

Se crean más copias hasta llegar a los casos bases,

donde se resuelve directamente el valor, y se va

saliendo liberando memoria hasta llegar a la primera

llamada (última en cerrarse)

Page 14: Clase 09 Recursion

¿Cómo se implementa la recursividad?

Una llamada recursiva infinita.

Cuando ejecuta este programa se bloqueará y

generará un error.

Page 15: Clase 09 Recursion

¿Cómo se implementa la recursividad?

Una función con un parámetro entero. Luego se

llame con un parámetro menos 1.

Cuando ejecuta imprimirá: 5 4 3 2 1 0 -1 ……;

hasta que se bloquee el programa.

Page 16: Clase 09 Recursion

¿Cómo se implementa la recursividad?

Una función con un parámetro entero que

imprima de 5 a 1 de uno en uno.

Cuando ejecuta imprimirá: 5 4 3 2 1

Page 17: Clase 09 Recursion

¿Cómo se implementa la recursividad?

Una función con un parámetro entero que

imprima de1 1 al 5 de uno en uno.

Cuando ejecuta imprimirá: 1 2 3 4 5

Page 18: Clase 09 Recursion

¿Cómo se implementa la recursividad?

¿Cómo trabaja la pila para el ejercicio anterior?

¿Cómo trabajará la pila para el factorial de un

número?

Page 19: Clase 09 Recursion

Tipos de recursividad

Recursividad simple. Aquella en cuya definición

sólo aparece una llamada recursiva. Se puede

transformar con facilidad en algoritmos

iterativos.

Page 20: Clase 09 Recursion

Tipos de recursividad

Recursividad múltiple. Se da cuando hay más

de una llamada a sí misma dentro del cuerpo

de la función, resultando más difícil de hacer de

forma iterativa. Un ejemplo típico es la función

de fibonacci.

Page 21: Clase 09 Recursion

Tipos de recursividad

Recursividad anidada. En algunos de los

argumentos de la llamada recursiva hay una

nueva llamada a sí misma.

Page 22: Clase 09 Recursion

Tipos de recursividad

Recursividad cruzada o indirecta. Son algoritmos

donde una función

provoca una llamada a

sí misma de forma

indirecta, a través de

otras funciones.

Page 23: Clase 09 Recursion

……