Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Programación II recursividad, Apuntes de Ingeniería de Telecomunicaciones

Asignatura: Programación II, Profesor: angel angel, Carrera: Ingeniería Técnica en Telecomunicación Especialidad Telemática., Universidad: UJAEN

Tipo: Apuntes

2013/2014

Subido el 11/07/2014

kanzacherkaoui
kanzacherkaoui 🇪🇸

4.5

(10)

8 documentos

1 / 104

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
TEMA 2.
RECURSIVIDAD
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Programación II recursividad y más Apuntes en PDF de Ingeniería de Telecomunicaciones solo en Docsity!

TEMA 2.RECURSIVIDAD

Recursividad.

Objetivos 

Conocer el concepto de recursividad.

Ver diferentes tipos de problemas recursivos

Comprender la soluciones de los problemasrecursivos.

Resolver diferentes problemas utilizando los dosenfoque (iterativo y recursivo)

Buscar diferentes problemas que su solución seaobvia utilizando una solución recursiva.

Recursividad. Introducción

En un programa una función

f()

puede llamar a otra

g().

¿Pueden

f()

y

g()

llamarse a sí mismas?

Recursividad. Introducción

Fundamentación matemática 

Método de inducción en el conjunto de los númerosnaturales:^ 

Se demuestra la certeza para un cierto valor

k de N

Se verifica que se cumple para (k+1)

Se concluye que es cierto para cualquier valor de N

El problema queda resuelto

Recursividad. Introducción

Solución de problemas recursivos:

^

División sucesiva del problema original en uno o varios más pequeños, del mismotipo que el inicial. ^

Se van resolviendo estos problemas más sencillos. ^

Con las soluciones de éstos se construyen las soluciones de los problemas máscomplejos.

O lo que es lo mismo, una

Definición intuitiva sería

1.^

Un problema P se puede resolver conociendo la solución de otro problema Qque es del mismo tipo que P, pero más pequeño.

2.^

Igualmente, supongamos que pudiéramos resolver Q mediante la búsqueda dela solución de otro nuevo problema, R, que sigue siendo del mismo tipo que Q yP, pero de un tamaño menor que ambos.

3.^

Si el problema R fuera tan simple que su solución es obvia o directa, entonces,dado que sabemos la solución de R, procederíamos a resolver Q y, una vezresuelto, finalmente se obtendría la solución definitiva al primer problema, P.

Recursividad. Introducción

Ejemplos simples de recursividad.^ A.

Cálculo del factorial de un número, por ejemplo, 5.

Descomposición delproblema en otrosmás simples

0! = 1 Solución Conocida 1! = 1 * 0! = 1

Resolución deproblemas complejosa partir de otrosmás simples

Recursividad. Diseño

Módulo M con una llamada a sí mismo:

módulo

recursivo directo.

Módulo M con una llamada a otro F, que hace unallamada a M:

Módulo recursivo indirecto.

Ejemplo: Implementación del factorial de un número.

public long factorial (long n){

if (n == 0) return 1;

else return n * factorial(n-1);

Recursividad. Diseño

Dos partes principales:1.

La llamada recursiva, que expresa el problema originalen términos de otro más pequeño.

El valor para el cual se conoce una solución no recursiva. Caso base: una instancia del problema

cuya solución no

requiere de llamadas recursivas.

El caso base:^ 

Actúa como condición de finalización de la función recursiva.Sin el caso base la rutina recursiva se llamaríaindefinidamente y no finalizaría nunca. 

Es el cimiento sobre el cual se construirá la solucióncompleta al problema.

Recursividad. Diseño

Búsqueda de soluciones recursivas: cuatro preguntasbásicas.^ 1.

¿Cómo se puede definir el problema en términos deuno o más problemas más pequeños del mismo tipo queel original?

¿Qué instancias del problema harán de caso base?

Conforme el problema se reduce de tamaño ¿sealcanzará el caso base?

¿Cómo se usa la solución del caso base para construiruna solución correcta al problema original?

Recursividad. Diseño. Fibonacci

Ejemplo: la sucesión de Fibonacci.

El tercer término de la sucesión se obtiene sumando el segundo y elprimero. El cuarto, a partir de la suma del tercero y el segundo.

El problema: calcular el valor del n-ésimo término de la solución, que seobtendrá sumando los términos n-1 y n-2.

Las respuestas a la preguntas anteriores serían:1.

fibonacci(n) = fibonacci(n-1) + fibonacci(n-2).2. Casos bases: fibonacci(1) = 1 y fibonacci(2)=1.3. En cada llamada a la rutina fibonacci se reduce el tamaño del problema en unoo en dos, por lo que siempre se alcanzará uno de los dos casos bases.4. fibonacci(3) = fibonacci(2) + fibonacci(1) = 1 + 1.

Se construye la solución del problema n==2 a partir de los dos casosbases.

Recursividad. Diseño. Fibonacci

Ejemplo: Traza de la función de Fibonacci de 4.

Diseño. MCD

Recursividad. Diseño. MCD

Soluciones a las cuatro preguntas:1.

Es evidente que MCD(m, n) ha sido definida en términos de un problemadel mismo tipo, pero justifiquemos que MCD(n, m % n) es de tamañomenor que MCD (m, n):

^

El rango de m % n es 0, ..., n-1, por tanto el resto es siempre menor que n. ^

Si m > n, entonces MCD(n, m % n) es menor que MCD(m, n). ^

Si n > m, el resto de dividir m entre n es m, por lo que la primera llamada recursivaes MCD(n, m mod n) es equivalente a MCD(n, m), lo que tiene el efecto deintercambiar los argumentos y producir el caso anterior.

2.^

Si n divide a m, si y sólo si, m mod n = 0, en cuyo caso MCD(m, n) = n,por tanto, se conseguirá el caso base cuando el resto sea cero.

3.^

Se alcanzará el caso base ya que n se hace más pequeño en cadallamada y además se cumple que 0

m mod n

n-1.

4.^

En este caso, cuando se llega al caso base es cuando se obtiene lasolución final al problema, por tanto no se construye la solución generalen base a soluciones de problemas más simples.

Recursividad. Diseño. MCD

Soluciones a las cuatro preguntas:1.

¿Cómo se puede definir el problema en términos de uno o másproblemas más pequeños del mismo tipo que el original?Es evidente que MCD(m, n) ha sido definida en términos de unproblema del mismo tipo, pero justifiquemos que MCD(n, m % n)es de tamaño menor que MCD (m, n):

^

El rango de m % n es 0, ..., n-1, por tanto el resto es siempre menor que n. ^

Si m > n, entonces MCD(n, m % n) es menor que MCD(m, n). ^

Si n > m, el resto de dividir m entre n es m, por lo que la primera llamadarecursiva es MCD(n, m mod n) es equivalente a MCD(n, m), lo que tiene el efectode intercambiar los argumentos y producir el caso anterior.