










































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
asdasdasdasdasdasdas das das d asd a da sd asd ad a
Tipo: Apuntes
1 / 50
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!











































objeto es
recursivo
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
La función devuelve un valorsimple sin utilizar la recursión(0! = 1).
Se hacen llamadas recursivasque se van aproximando al casobase.
Según el subprograma al quese llama, existen dos tipos derecursión:
●
Recursividad simple o directa.
procedimiento
Recursivo()
… inicio
… Recursivo(…)…
fin_función
Recursividad directa
procedimiento
Recursivo1()
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
●
Recursividad mutua o indirecta.
… inicio
… Recursivo2(…)…
fin_función procedimiento
Recursivo2()
… inicio
… Recursivo1(…)…
fin_función
Recursividad indirecta
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
Llamadas anidadas (no recursivas).
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
En el caso del factorial…
●
Por definición, 0! = 1,
●
Para cualquier número entero mayor que 0, n! = n * (n-1)!
En este problema:
●
La solución de n! puede ser definida en función de su tamaño (n).
●
Se puede dividir en instancias más pequeñas (<n) del mismo problema.
●
Se conoce la solución de las instancias más simples (n=0).
●
Por inducción, las llamadas más pequeñas (<n) pueden quedar resueltas.
Sabemos que 4! = 4 * 3!
Conclusión: Se puede resolver por recursividad.
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
Conclusión: Se puede resolver por recursividad.
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1 * 0!
0! = 1 (caso base)
1 * 1
devuelve 1
=
2 * 1
devuelve 1
=
3 * 2
devuelve 2
=
4 * 6
devuelve 6
=
devuelve 24
pila
registro de activación de procedimientos
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
En cada llamada a la función factorialcarga en la pila de llamadas su registrode activación (cómo en cualquierllamada a una subrutina).
Siempre se refieren al ámbito en el que han sido declarados
.
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
han sido declarados
.
Cuando se llega al caso base (n< 1),el registro de activación se desapila yel flujo de control del programaregresa a la última llamada que se hahecho (cuando n=1), devolviendoademás el valor de retorno (1).
Los registros de activación se vandesapilando, restaurando los valoresanteriores de n y devolviendo losvalores de retorno de cada una dellamadas recursivas a la función (1, 1,2, 6, 24).
escribir
(Potencia(2,5))
x=2, y=5 devolver
(
Potencia(2,4))
x=2, y=4 devolver
(
Potencia(2,3))
x=2, y=
2 * 8
2 * 16
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
x=2, y=3 devolver
(
Potencia(2,2))
x=2, y=2 devolver
(
Potencia(2,1))
x=2, y=1 devolver
(
Potencia(2,0))
x=2, y=0 devolver
(1)
1
2 * 1
2 * 2
2 * 4
Escribir un número decimal en binario.
●
Caso base: si n < 2 n en binario es n.
●
Si n >= 2, n en binario es la división entera de n entre 2 en binarioseguido del resto de dividir n entre 2.
2 en binario es
2
div
2
en binario (1), seguido de
2
mod
2
(0)
10
.
3 en binario es
3
div
2
en binario (1), seguido de
3
mod
2
(1)
11
.
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
3 en binario es
3
div
2
en binario (1), seguido de
3
mod
2
(1)
11
.
La secuencia leída decaracteres es h,o,l,a,Intro.
●
Lo que ocurre en la recursión “decola”.
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
procedimiento
LeerCaracteres()
var
carácter
:
car
inicio
leer
(car)
si
código
(car)
<>
13
LeerCaracteres() escribir
(car)
fin_si
fin_procedimiento
lógico
función
esPar(
valor
entero
:n)
inicio
si
n
= 0
entonces
devolver
(
verdad
)
si_no
devolver
(esImpar(n-1))
fin_si
fin_funciónlógico
función
esImPar(
valor entero
:n)
inicio
Ejemplo de recursividad mutuao indirecta.
●
Determinar si un númeroentero positivo es par.
esPar(3)
falso
falso
devuelve falso
=
devuelve falso
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012
inicio
si
n
= 0
entonces
devolver
(
falso
)
si_no
devolver
(esPar(n-1))
fin_si
fin_función //Ejemplo de llamada si
esPar(5)
entonces
...
esImpar
(
2
)
esPar(1)
esImpar(0) (Caso base)
devuelve falso
falso
falso =
devuelve falso
=
esImPar(3)
esPar(2)
esIMPar(1)
esPar(0) (Caso base)
devuelve verdad
verdad
= verdad
devuelve verdad
= verdad
devuelve verdad
=
devuelve verdad
esPar(4)
verdad
devuelve verdad