【问题标题】:Why recursion is slower than iteration in python3?为什么递归比python3中的迭代慢?
【发布时间】: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


【解决方案1】:

第一个例子只是做重复的工作。考虑一下 stepPerms(1) 总共被调用了多少次。

【讨论】:

    猜你喜欢
    • 2013-12-12
    • 2019-05-03
    • 2019-03-25
    • 2014-03-08
    • 2019-07-30
    • 1970-01-01
    • 2015-03-26
    • 2015-10-20
    • 2021-02-11
    相关资源
    最近更新 更多