Algorithm 计算递归函数的大O

Algorithm 计算递归函数的大O,algorithm,recursion,Algorithm,Recursion,我有一个检查数组是否是堆的方法。在每次递归调用中,我在左子树和右子树上创建两个新的递归调用,以遍历节点并检查它们的值是否正确 我想计算一下这个。我认为在最坏的情况下是O(n),因为如果它是一个堆,那么它永远不会提前停止,需要访问每个节点。我认为最好的情况是O(3),当它检查第一个左子树和右子树并返回false(不是堆)时,就会出现这种情况 我的问题是:这种逻辑有意义吗?我想是的,但是每当我看到递归函数的时间复杂性时,它们总是以对数时间的形式出现。这几乎就好像递归函数有一些神秘的性质,没有人明确说

我有一个检查数组是否是堆的方法。在每次递归调用中,我在左子树和右子树上创建两个新的递归调用,以遍历节点并检查它们的值是否正确

我想计算一下这个。我认为在最坏的情况下是O(n),因为如果它是一个堆,那么它永远不会提前停止,需要访问每个节点。我认为最好的情况是O(3),当它检查第一个左子树和右子树并返回false(不是堆)时,就会出现这种情况


我的问题是:这种逻辑有意义吗?我想是的,但是每当我看到递归函数的时间复杂性时,它们总是以对数时间的形式出现。这几乎就好像递归函数有一些神秘的性质,没有人明确说明。为什么递归函数经常以对数时间处理事情?我的上述逻辑有效吗?

是的,这是有道理的。三种情况中只有一种(尽管可以说是最有趣的)有对数。

是的,这是有意义的。您看到大多数算法需要对数时间的原因是,它会在某个对象上重复,并不断将范围除以某个因子