Está en la página 1de 8

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

RECURSIVIDAD:
La recursividad es una tcnica de programacin muy utilizada
como alternativa a un proceso iterativo.
Es muy til en problemas en que la solucin utilizando una
estructura iterativa es compleja y a veces irresoluble, en
muchos casos simplifica el cdigo.
La recursin en una funcin consiste en que en el cuerpo de
sentencias de la misma se invoca a la propia funcin para
resolver una versin ms pequea del problema original.
Habr un caso (o varios) tan simple que pueda resolverse
directamente sin necesidad de hacer otra llamada recursiva, y
otros en que las llamadas prcticamente se convertirn en
infinitas.
Para que un problema sea recursivo debe incluir tres
elementos.
1)

El Caso-Base: Es una salida no recursiva o caso base en


que el problema funciona correctamente para ella.

2)

Caso-General: Son los casos no bases y es donde se


genera el proceso recursivo (la llamada a s mismo).

3)

La condicin de trmino: Es la salida del proceso recursivo


(Termino de la recursividad).

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

Estructura de un proceso recursivo:


1)

Obtencin de una definicin exacta del problema.

2)

Determinar el tamao del problema completo que hay


que resolver Parmetros en la llamada inicial.

4)

Resolver el (los) casos bases o triviales (no recursivos).

5)

Resolver el caso general en trminos de un caso ms


pequeo (llamada recursiva).

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

Aplicaciones:
1)

Obtener el factorial de un nmero entero positivo en


forma recursiva.

Solucin:
Sabemos que ! =
Se obtiene:
Caso Base:
Si n<2 entonces fac=1
Caso General: n>=2 entones fac(n)=fac(n-1)*n
Cdigo en Python: Pruebe para n=6 qu obtiene?
# -*- coding:cp1252-*def factorial(n):
if (n<2):
return 1
else:
return factorial(n-1)*n
# Invocacin
num=int(input("Ingrese nmero entero:..."))
print "El factorial para", num, "es:",factorial(num)

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

2)

Calcular el trmino ensimo de la serie de fibonacci en


forma recursiva:
1, 1, 2, 3, 5,8,13,.

Solucin:
Como sabemos en la serie de fibonacci los primeros dos
trminos son los iniciales, y a partir del tercero se forman de la
suma de los dos anteriores, es decir:

=
=
= + = + =
= + = + =
. . .
= +
Se obtiene:
Caso Base:
Si n<2 entonces fib =1
Caso General : Si n>2 entonces fib(n)=fac(n-1)+fib(n-2)
Cdigo en Python: pruebe para n= 5?
# -*- coding:cp1252-*def fibonacci(n):
if (n<2):
return 1
else:
return fibonacci(n-1)+ fibonacci(n-2)

termino=int(input("Qu trmino de fibonacci desea...."))


print "El ", termino , "trmino de fibonacci es:",fibonacci(termino)

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

3)

Calcular en forma recursiva la potencia a elevado a b con


b entero positivo.

Solucin:
En este caso se parte de la potencia ms baja:
=
=
=

=
Se obtiene:
Caso Base : Si b=0 potencia =1
Caso General : Si b>0 potencia(a,b)=potencia(a,b-1)*a
Cdigo Python: Pruebe para a=5 y b=3 qu obtiene ?
# -*- coding:cp1252-*def potencia(a,b):
if (b==0):
return 1
else:
return potencia(a,b-1)*a

base=input(" Base que desea....")


exponente=int(input(" Exponente que desea.... "))
print base," elevado a ", exponente , "es:...",potencia(base,exponente)

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

4)

Imprimir los primeros n nmeros naturales.

Solucin:
Caso Base : Si n=1 imprime 1
Caso General : Si n>1

naturales(n-1)
imprime n

Cdigo Python: Pruebe para n= 10?


# -*- coding:cp1252-*def naturales(n):
if (n==1):
print 1
else:
naturales(n-1)
print n

ter=input(" Cuntos naturales desea....")


print "Los naturales hasta ", ter , "son:..."
naturales(ter)
Qu sucede si se invierte el orden de las instrucciones:
naturales(n-1)
print n
?

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

5) Sumar en forma recursiva los n primeros nmeros pares.


Solucin:
En este caso:
suma(0) = 0
suma(1) = suma(0) + 2*1 = 0 + 2
suma(2) = suma(1) + 2*2 = 2 + 4
. . .
Suma(k) = suma(k-1) + 2*k
Se obtiene:
Caso Base : Si n=0 entonces suma_pares=0
Caso General : Si n>0 entonces suma_pares(n-1)+2*n
Cdigo Python: pruebe para n=4 ?
# -*- coding:cp1252-*def sumaPares(n):
if (n==0):
return 0
else:
return sumaPares(n-1)+ 2*n
cant=input(" Cuntos pares va a sumar....")
print "La suma de .. ", cant , " pares es:...", sumaPares(cant)

ALGORITMOS Y PROGRAMACIN

TEMA: RECURSIVIDAD

Problemas recursivos propuestos: