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

Python 您如何估计这种递归算法的算法复杂性?,python,algorithm,recursion,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

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

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
因此,每个级别最多调用一次递归函数,这样可以消除指数增长。每一次,你要么采取奇数情况,要么采取偶数情况,这是执行一个单一的乘法步骤或除法步骤,然后提高到第二次方

有人能告诉我如何分析这个问题,以及递归算法吗?

最坏的情况是:n是奇数 fn=k+fn-1; 但下一次它将转到else分支,因为如果n是奇数,则n-1是偶数 然后问题就这样解决了 fn-1=k+fn-1/2

通过数学归纳法 fn=k*logn或复杂度方面的logn

最佳情况:n是偶数 问题分成了一半的子问题 fn=k+fn/2

通过数学归纳法 fn=k*logn复杂度方面的Ologn


所以,在最好和最坏的情况下,复杂度是Ologn

我认为它是在其中N是指数…实际上它是OC*N,其中C是常数。。。当C是常数时,你可以去掉它。。在这种情况下,C是2/3。。。或something@JoranBeasley它是Olg n;从指数中减去一使其相等,这意味着下一次调用将使其减半。最佳情况下的指数是2的幂,需要花费Olg n时间,而指数/2总是奇数的最坏情况下只需要两倍的调用次数。请注意,对于任何常数C,OC*n都等于ON。常数在大oh符号中是毫无意义的!