您如何估计这种递归算法的算法复杂度?

时间:2015-12-22 19:01:27

标签: python algorithm recursion

我只是在学习数据结构和算法复杂性的基础知识,但我对如何分析递归算法感到困惑。以此为例:

def expo_recurs(base, exponent):
    if exponent == 0:
        return 1
    elif exponent % 2 != 0:
        return base * expo_recurs(base, exponent - 1)
    else:
        return (expo_recurs(base, exponent / 2))**2

所以最多每个级别调用一次递归函数,这样可以消除指数式增长。每次通过你要么采取奇数情况,要么执行单个乘法步骤或除法步骤的偶数情况,然后将其提升到二次幂。

有人会介意如何分析这一点,以及一般的递归算法吗?

1 个答案:

答案 0 :(得分:4)

最坏的情况:因为n是奇数 F(N)= K + F(N-1);
但是下一次它将转到else分支,因为如果n是奇数,则n-1是偶数 那么问题会像这样破裂 F(N-1)= K + F(N-1/2);

通过数学归纳法 f(n)= k * log(n)或复杂度O(log(n))

最好的情况:n甚至是 问题打破半个子问题 F(N)= K + F(N / 2);

通过数学归纳法 f(n)= k * log(n)复杂度O(log(n))

因此,在最佳和最差情况下复杂度为O(log(n))