Python-如何计算此递归函数的时间复杂度?

Python-如何计算此递归函数的时间复杂度?,python,time-complexity,big-o,Python,Time Complexity,Big O,我想用尽可能多的方法来解决塔式料斗问题,并计算每种方法的时间复杂度(只是为了自我练习)。 解决方案之一是: def is_hopable(arr): if len(arr) < 1 or arr[0] == 0: return False if arr[0] >= len(arr): return True res = False for i in range(1,arr[0]+1): res = res

我想用尽可能多的方法来解决塔式料斗问题,并计算每种方法的时间复杂度(只是为了自我练习)。 解决方案之一是:

def is_hopable(arr):
    if len(arr) < 1 or arr[0] == 0:
        return False
    if arr[0] >= len(arr):
        return True
    res = False
    for i in range(1,arr[0]+1):
        res = res or is_hopable(arr[i:]) # This line  
    return res
def是可编程的(arr):
如果len(arr)<1或arr[0]==0:
返回错误
如果arr[0]>=len(arr):
返回真值
res=False
对于范围(1,arr[0]+1)内的i:
res=res或是(arr[i:])#这行
返回res

我知道递归时间复杂度计算的一般思想,但是我很难分析注释行(在for循环中)。通常我用
T(n)=C+T(那条线)
来计算时间复杂度,并用一个通用表达式(例如T(n-k))来减少它,直到我达到基本情况,并且可以用n来表示k,但是for循环的时间复杂度是多少?

for循环的
的复杂度可以达到
O(n^2)
因为循环的每次迭代(最多n次迭代)都会执行一个切片
arr[i::
,该切片返回
arr
的副本,而不首先返回
i
元素
O(n)
。考虑到这一点,总时间是
O(n^3)

上面提到的上限很紧。
示例:
arr=[n-1,n-2,n-3,…,1,1]

替代形式:
arr[i]=n-1-i
适用于所有
i
0