具有三个递归调用的递归函数的时间复杂度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有三个递归调用的递归函数的时间复杂度相关的知识,希望对你有一定的参考价值。
具有以下递归关系的递归函数的时间复杂度是多少:
T(n) = T(n-1) + T(n-2) + T(n-3), T(0) = T(1) = 1 and T(2) = 2
我知道一个带有两个递归调用的函数会给出O(2 ^ n)的指数时间复杂度,这是否意味着具有上述递归关系的函数将具有O(3 ^ n)的时间复杂度?
谢谢您的帮助。
答案
更具体地说,假设您具有以下功能:
T(n) = T(n-1) + T(n-1) + T(n-1), T(0) = 1
写这个的方式时间复杂度恰好是O(3 ^ n)。
你的功能比这个功能好一点,但时间复杂度仍然是相同的O(3 ^ n)
现在,如果我们重写我的建议代码,如:
T(n) = 3 * T(n-1), T(0) = 1
复杂性只是O(n)!因为之前调用的结果在不被再次调用的情况下被重用。
因此,在您的实现中,如果您可以使用缓冲区来调用而只是使用以前调用的值(某些语言实际上可以支持此值),那么复杂性将降低到O(n)。
以上是关于具有三个递归调用的递归函数的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章
尾递归 递归函数中,递归调用是整个函数体中最后的语句,且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归,空间复杂度是O