【发布时间】:2021-01-07 06:14:26
【问题描述】:
我尝试回答一个与斐波那契数非常相似的问题。
当我尝试以递归方式编写代码时
import time
def stepPerms(n):
if n==1:
return 1
elif n==2:
return 2
elif n == 3:
return 4
else:
return stepPerms(n-1)+stepPerms(n-2)+stepPerms(n-3)
t0= time.time()
print(stepPerms(36)%(10**10+7))
t1= time.time()
print(t1-t0)
我得到了执行时间
175.47555208206177
当使用迭代样式重写相同的代码时
import time
def stepPerms(n):
l=[0]*n
if n==1:
return 1
elif n==2:
return 2
elif n == 3:
return 4
else:
l[0]=1
l[1]=2
l[2]=4
for i in range(3,n):
l[i]=l[i-1]+l[i-2]+l[i-3]
return l[n-1]
t0= time.time()
print(stepPerms(36)%(10**10+7))
t1= time.time()
print(t1-t0)
我得到了执行时间
0.0010170936584472656
你能说出为什么执行时间来自不同的递归和迭代风格的代码吗?
【问题讨论】:
-
递归正在分支。在迭代中,您只需将已分配的值相加。在递归场景中,您在每次调用时计算三个值。所以换句话说,stepPerms(n-1) 不会返回保存的值,而是会计算它。
-
您将时间复杂度误认为是执行时间。不一样。
-
@Netwave 谢谢你的指出,其实我只是在问执行时间。
标签: python-3.x recursion iteration