c++ - 多次递归调用

标签 c++ recursion time-complexity

我知道递归函数是什么以及如何可视化堆栈顶部的每个递归调用。但是我不知道当函数像

这样对自身进行多次调用时如何思考
float foo(int n){

   int a = 0;
   for(int i = 0; i < n; i++)
       a += 1;

   if (n > 2)
       return foo(n/2) + foo(n/2); // What happens here?

    return a;
}

我现在应该考虑两个不同的堆栈还是可视化结果的最佳方式是什么?

最佳答案

正如其他答案所提到的,只有一个堆栈和递归调用严格按照给定顺序求值。

但是,出于分析目的,您可以将整个调用序列可视化为一棵树。 Call tree for <code>foo(n)</code>

关于c++ - 多次递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30567825/

相关文章:

c++ - 编写我自己的字符串类但得到 "reference to ‘string’ 是不明确的“编译错误

algorithm - 时间太复杂的算法示例?

algorithm - 为什么 O(n) 优于 O( nlog(n) )?

c++ - size_t、ptrdiff_t 和 std::vector::size()

c++ - 不能使用枚举类作为 unordered_map 键

c++ - 多个 DirectShow 缓冲区如何工作?

algorithm - 方案中的循环排列

java - 为什么用递归停止 isRoundNumber

c++ - (c)make - 递归编译

algorithm - 比较最佳和平均时间复杂度