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个并将它们分开添加。尽管我不确定。那么有人可以通过展示他们的步骤来指导我吗?
答案 0 :(得分:2)
您可以将函数的调用绘制为二叉树:
func3
/\
func3 func3
.............
您的二叉树中将有n
个节点级别,每个级别next_level_node_count = perv_level_node_count * 2
。
这是一个几何级数。
答案 1 :(得分:1)
另一种方法是形成函数的递推方程并求解。给定的函数可以表示为
T(1) = O(1)
T(n) = 2 * T(n-1)
当您将重复扩展如下时,我们得到 T(n)= 2 ^ n
T(n) = 2 * { 2 * T(n-2) } = 2^2 * T(n-2)
= 2^3 * T(n-3)
= 2^(n-1) * T(n-(n-1))
= 2^(n-1) * O(1)
= 2^(n-1)
= 2^n
希望它有所帮助!