具有三个递归调用的递归函数的时间复杂度

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)。

以上是关于具有三个递归调用的递归函数的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法—递归recursion

Java基础之方法的调用重载以及简单的递归

我在 laravel 中的递归函数不调用自己

尾递归 递归函数中,递归调用是整个函数体中最后的语句,且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归,空间复杂度是O

递归之汉诺塔

简单循环时间复杂度内的递归函数