Hay dos funciones que implementan la secuencia de Fibonacci. fibo()
era de estilo recursivo y iterfibo()
se implementó mediante un método circular. Comparé el tiempo de desempeño de las dos funciones.
import matplotlib.pyplot as plt
import time
# iteration style
def iterfibo(count):
if count <= 1 :
return count
left, right = 0, 1
for i in range(count - 1):
temp = left + right
left = right
right = temp
return temp
# recursion style
def fibo(n):
if n <= 1:
return n
return fibo(n - 1) + fibo(n - 2)
length = [x for x in range(25)]
iterfibo_time = []
fibo_time = []
for i in length:
# fibo's execution time
ts = time.time()
fibo(i)
fibo_time.append(time.time() - ts)
# iterfibo's execution time
ts = time.time()
iterfibo(i)
iterfibo_time.append(time.time() - ts)
plt.plot(length, iterfibo_time)
plt.show()
Sin embargo, me preguntaba si el gráfico de iterfibo()
no era una curva suave. Y en algunos casos, el tiempo de ejecución se redujo, no aumentó.
fibo()
tiempo (recursivo):
iterfibo()
tiempo (iterativo):
Entonces me pregunto por qué el gráfico toma esta forma.
Como ya se señaló en un comentario, los tiempos de cálculo de iterfibo()
son demasiado pequeños para medirlos con precisión time()
. Por lo tanto, las variaciones se deben simplemente a la inexactitud de la medición y no tienen sentido.
El paso alrededor de n = 26 podría deberse a un cambio de enteros de 16 a 32 bits. F (25) = 46368 se puede representar con 16 bits, mientras que F (27) = 75025 requiere números enteros de 32 bits.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras