Tarea Recursividad

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

INSTITUTO POLITÉCNICO NACIONAL

Escuela Superior de Ingeniería


Mecánica y Eléctrica.
“Culhuacán”
Base y Estructura de Datos.

Profesor: Rodríguez Navarro Gustavo.

Alumno: Bonilla Sánchez Aldo David.

Grupo: 3EV36.

23 – Abril – 2021.
Definición de recursividad.
La recursividad es un concepto que se indica cuando un método se llama a si mismo.
Cuando creamos un método recursivo debemos tener en cuenta que este tiene que
terminar por lo que dentro del método debemos asegurarnos de que no se está llamando a
si mismo todo el rato, Lo que quiere decir que el ciclo es finito.

Podemos utilizar recursividad para reemplazar cualquier tipo de bucle. A pesar de ello en
el mundo laboral no se utiliza demasiado, debido a que un error puede ser trágico en la
memoria, así como tener una lista con millones de datos, puede hacer que utiliza mucha
memoria. Aun así, la gran mayoría de las veces, utilizamos recursividad para algoritmos
de búsqueda u ordenación.

Se denomina caso base a la condición de terminación de la recursividad.

•La recursividad es un concepto fundamental en matemáticas y en computación.

 Es una alternativa diferente para implementar estructuras de repetición (ciclos). Los


módulos se hacen llamadas recursivas.

 Se puede usar en toda situación en la cual la solución pueda ser expresada como una
secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de
reglas no ambiguas.

Recursividad e iteración.
Tanto la recursión como la iteración se usan para ejecutar algunas instrucciones
repetidamente hasta que alguna condición sea verdadera. Pero existe una diferencia
importante entre ambas, primero conoceremos el concepto de recursividad.

Recursividad se refiere a una situación en la que una función se llama a sí misma una y otra
vez.

Iteración permiten repetir una sentencias o conjunto de ellas. 


En programación de computadoras, una operación iterativa es la que repite un proceso
durante un número determinado de veces (iteraciones), dependiendo de los parámetros
definidos por el programador. Normalmente la salida de una iteración del proceso se utiliza
como punto de inicio para la siguiente iteración. Cada paso origina el paso siguiente. El
proceso continúa hasta que se alcanza una meta determinada y el proceso termina.

La recursividad se usa para realizar algoritmos cortos y elegantes con menos código,
mientras que la iteración presentan la habitual forma de uno o varios bucles.

La recursión y la iteración son técnicas de programación que se suelen utilizar en


programas de software para resolver rápidamente problemas complejos y repetitivos. Un
programa recursivo simplifica un problema y lo resuelve desde abajo hacia arriba. Un
proceso iterativo repite un proceso una y otra vez empezando cada nueva iteración con el
resultado de la iteración anterior. El objetivo principal de estas técnicas es acelerar la
ejecución de un programa.

Recursividad Grafica Ordenamiento y


Búsqueda..
En la asignatura hecho la distinción entre programas y los procesos que éstos generan. Esta
distinción se hace muy importante en el caso de los programas recursivos.

Hemos visto en el apartado anterior que el proceso generado por una función recursiva
tiene a veces un alto coste espacial y temporal debido a las llamadas que permenacen en
espera en la pila de la recursión.

Es posible escribir programas recursivos que generen procesos que no dejan llamadas en
espera. A estos procesos los llamamos procesos iterativos, en contraposición con
los procesos recursivos que generan los programas vistos hasta ahora.

La siguiente versión de la función factorial está escrita de forma que el proceso generado es
iterativo y no deja llamadas en espera.

(define (factorial-iter n)
(fact-iter-aux n n))

(define (fact-iter-aux product n)


(if (= n 1)
product
(fact-iter-aux (* product (- n 1)) (- n 1))))
La función (fact-iter-aux product n) es la que implementa la nueva versión de
factorial. El parámetro adicional product que se ha añadido guarda en cada llamada el
cálculo parcial del factorial. Cuando la recursión llega a su fin ya se tiene el resultado
calculado y se devuelve directamente, sin necesidad de evaluar ninguna función en espera.

Lo podemos comprobar en la secuencia de llamadas que se produce para


evaluar (factorial-iter 4):

(factorial-iter 4)
(factorial-iter-aux 4 4)
(factorial-iter-aux 12 3)
(factorial-iter-aux 24 2)
(factorial-iter-aux 24 1)
24

Veamos otro ejemplo más, la versión iterativa de la función longitud que calcula la


longitud de una lista.

(define (longitud-iter lista)


(longitud-iter-aux lista 0))

(define (longitud-iter-aux lista result)


(if (null? lista)
result
(longitud-iter-aux (cdr lista) (+ result 1))))

La función longitud-iter ahora recibe un argumento adicional, denominado result.


Igual que en la función fact-aux anterior en él se almacena el valor parcial del cálculo
de la recursión. En este caso de la longitud de la palabra.

En cada llamada recursiva se incrementa en 1 el resultado parcial y se elimina un elemento


de la lista. De esta forma, cuando la lista esté vacía, el resultado habrá acumulado su
longitud (siempre que inicialmente se haya pasado 0 como valor).

La función longitud se redefine para que llame a longitud-iter con los valores


iniciales correctos.

Como podemos comprobar, tampoco se deja ninguna llamada en espera en la pila de


llamada. Cuando alcanzamos el caso base de la recursión tenemos la respuesta al problema
completo.

(longitud 'abcdef)
(longitud-iter 'abcdef 0)
(longitud-iter 'bcdef 1)
(longitud-iter 'cdef 2)
(longitud-iter 'def 3)
(longitud-iter 'ef 4)
(longitud-iter 'f 5)
(longitud-iter "" 6)
6

También podría gustarte