algorithm - 这个递归算法的时间复杂度是多少?

标签 algorithm recursion time-complexity big-o

int func3(int n){
  if (n <= 1) return n;
  return func3(n - 1) + func3(n - 1);}

我的想法是:在每个递归中我们都有一个加法运算。而我们每次把递归一分为二的时候都做这个操作。所以我不确定我应该称它为 O(N2^N) 还是 O(2^N)。我认为 O(N2^N) 更有意义,因为我们将问题分成 2^N 部分并分别添加它们。尽管我不确定。那么有人可以通过展示他们的步骤来指导我吗?

最佳答案

您可以将对函数的调用绘制为二叉树:

    func3
     /\
 func3 func3
.............

您的二叉树中将有 n 级节点,每个 next_level_node_count = perv_level_node_count * 2

这是一个几何级数。

关于algorithm - 这个递归算法的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49129778/

相关文章:

windows - 如何杀死进程窗口的所有递归子级

java - 使用递归检查整数的位数是否为偶数

python - 如何提高 python 代码的时间复杂度?

java - 二叉堆 Dijkstra 算法的反例(负权重图)

algorithm - 您能说出这种音频压缩算法吗?

c++ - 创造向外螺旋

python - n 和 m 的运行时复杂度是多少?

看不懂这个圆周率算法

javascript - 递归遍历 HTML DOM 并打印属性

algorithm - 复杂性 - Dijkstra 算法