Foros del Web » Programando para Internet » Python »

Dive into Python - ejemplo de función

Estas en el tema de Dive into Python - ejemplo de función en el foro de Python en Foros del Web. Código: def fib(n): print 'n =', n if n > 1: return n * fib(n - 1) else: print 'fin de la línea' return 1 ...
  #1 (permalink)  
Antiguo 25/08/2012, 08:50
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 14 años, 11 meses
Puntos: 15
Dive into Python - ejemplo de función

Código:
def fib(n):
	print 'n =', n
	if n > 1:
		return n * fib(n - 1)
	else:
		print 'fin de la línea'
		return 1
fib(10)
No entiendo la línea return n * fib(n - 1)

es decir, vuelve a ejecutar la función pasando el argumento n pero el signo de * ahí me confunde...

en el primer caso, si n vale 10 entonces no queda algo como return 10 * 9 ???

no sería más fácil algo del tipo return n - 1 ?
  #2 (permalink)  
Antiguo 25/08/2012, 09:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Dive into Python - ejemplo de función

La función fib usualmente se le asigna a los números de fibonacci, pero veo que en este ejercicio lo que están implementando es la función recursiva para números factoriales.

La linea
Código Python:
Ver original
  1. n * fib(n - 1)
Significa que vuelve a llamar a la función fib con el argumento n - 1 y lo que devuelva lo multiplica por n (de ahí el signo *).

Por ejemplo:
Código:
fib(1) -> 1
fib(2) -> 2 * fib(1)
fib(3) -> 3 * fib(2)
fib(4) -> 4 * fib(3)
Ahora si haces las sustituciones correspondientes obtienes lo siguiente:
Código:
fib(1) -> 1
fib(2) -> 2 * fib(1) -> 2 * 1
fib(3) -> 3 * fib(2) -> 3 * (2 * fib(1)) -> 3 * (2 * (1))
fib(4) -> 4 * fib(3) -> 4 * (3 * fib(2)) -> 4 * (3 * (2 * fib(1))) -> 4 * (3 * (2 * (1)))
  #3 (permalink)  
Antiguo 26/08/2012, 06:18
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 14 años, 11 meses
Puntos: 15
Respuesta: Dive into Python - ejemplo de función

Cita:
Iniciado por razpeitia Ver Mensaje
Ahora si haces las sustituciones correspondientes obtienes lo siguiente:
Código:
fib(1) -> 1
fib(2) -> 2 * fib(1) -> 2 * 1
fib(3) -> 3 * fib(2) -> 3 * (2 * fib(1)) -> 3 * (2 * (1))
fib(4) -> 4 * fib(3) -> 4 * (3 * fib(2)) -> 4 * (3 * (2 * fib(1))) -> 4 * (3 * (2 * (1)))
Muchas gracias por la explicación, ni idea de la serie de fibonacci.

Ahora bien, en la salida del programa solo se ve una cuenta regresiva y no los resultados del tipo 4*3*2*1, habría que agregar otro print en el medio del if para ver esos resultados supongo

Etiquetas: ejemplo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:05.