加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 对于memoized递归与迭代,Big O表示法是否相同?

发布时间:2020-12-20 13:39:40 所属栏目:Python 来源:网络整理
导读:我在这里使用了一个简单的例子 function factorial(n) if n==1 return 1 else return n*factorial(n-1)function factorial(n) result = 1 for i = 1 to n result *= n return result 或者是递归的函数,并且具有memoization和动态编程,在迭代数组并填充值等等
我在这里使用了一个简单的例子

function factorial(n)
   if n==1 return 1
   else return n*factorial(n-1)

function factorial(n)
    result = 1
    for i = 1 to n
        result *= n
    return result

或者是递归的函数,并且具有memoization和动态编程,在迭代数组并填充值等等.

我知道有时递归是坏的,因为你可以用堆(或堆栈?)耗尽内存(尾递归?),但这是否会影响O表示法?

递归memoized算法是否具有与迭代版本相同的O符号/速度?

解决方法

通常,在考虑算法的复杂性时,我们将分别考虑空间和时间复杂度.

两个类似的算法,一个递归,一个转换为非递归,通常具有相同的时间复杂度,但空间复杂度不同.

在您的示例中,两个阶乘函数都是O(n)时间复杂度,但递归版本是O(n)空间复杂度,而O(1)则是迭代版本.

这种差异并不普遍. memoization占用空间,有时它占用的空间与递归版本使用的堆栈空间相当甚至更大.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读