P. 1
Aprenda a Pensar Como Un Program Ad Or Con Python

Aprenda a Pensar Como Un Program Ad Or Con Python

|Views: 4|Likes:

More info:

Published by: Diego Armando Mendez on Mar 25, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/04/2013

pdf

text

original

¿Qu´e sucede si llamamos a factorial y le damos 1.5 como argumento?

>>> factorial (1.5)
RuntimeError: Maximum recursion depth exceeded

Tiene todo el aspecto de una recursi´on infinita. Pero, ¿c´omo ha podido ocurrir?
Hay una condici´on de salida o caso base: cuando n == 0. El problema es que el
valor de n yerra el caso base.

En la primera llamada recursiva, el valor de n es 0.5. En la siguiente vez su valor
es -0.5. A partir de ah´ı, se vuelve m´as y m´as peque˜no, pero nunca ser´a 0.

Tenemos dos opciones. Podemos intentar generalizar la funci´on factorial para
que trabaje con n´umeros de coma flotante, o podemos hacer que factorial
compruebe el tipo de su par´ametro. La primera opci´on se llama funci´on gamma,
y est´a m´as all´a del objetivo de este libro. As´ı pues, tomemos la segunda.

Podemos usar la funci´on type para comparar el tipo del par´ametro con el tipo
de un valor entero conocido (por ejemplo 1). Ya que estamos en ello, podemos
asegurarnos de que el par´ametro sea positivo:

def factorial (n):
if type(n) != type(1):
print "El factorial est´a definido s´olo para enteros."
return -1
elif n < 0:

print "El factorial est´a definido s´olo para enteros\

positivos."

return -1
elif n == 0:
return 1

else:

return n * factorial(n-1)

58

Funciones productivas

Ahora tenemos tres condiciones de salida o casos base. El primero filtra los
n´umeros no enteros. El segundo evita los enteros negativos. En ambos casos, se
muestra un mensaje de error y se devuelve un valor especial, -1, para indicar a
quien hizo la llamada a la funci´on que algo fue mal:

>>> factorial (1.5)
El factorial esta definido solo para enteros.
-1
>>> factorial (-2)
El factorial esta definido solo para enteros positivos.
-1
>>> factorial ("paco")
El factorial esta definido solo para enteros.
-1

Si pasamos ambas comprobaciones, entonces sabemos que n es un entero positivo
y podemos probar que la recursi´on termina.

Este programa muestra un patr´on que se llama a veces guardi´an. Las primeras
dos condicionales act´uan como guardianes, protegiendo al c´odigo que sigue de
los valores que pudieran causar errores. Los guardianes hacen posible demostrar
la correcci´on del c´odigo.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->