如果参数太长,Python函数中的无限递归

时间:2014-02-26 01:32:38

标签: python python-3.x recursion

我编写了这个递归函数,它返回整数列表中的最大值:

def max_r(l: [int]) -> int:
    if len(l) == 1:
        return l[0]
    else:
        return l[0] if max_r(l[1:]) < l[0] else max_r(l[1:])

电话max_r([1,4,3,2,3,4,89,2,30,1]会返回89,但会在更长的列表中调用该函数:

max_r([96, 84, 87, 81, 94, 74, 65, 42, 45, 76, 5, 37, 86, 8, 46, 54, 62, 63, 35, 85, 16, 23, 18, 57, 51, 90, 58, 33, 47, 10, 64, 49, 67, 29, 71, 30, 9, 99, 75, 3, 97, 32, 59, 25, 27, 72, 61])

导致无限递归。为什么呢?

1 个答案:

答案 0 :(得分:2)

它不是无限递归,但是当你不需要时,你正在进行两次相同的递归调用。似乎可以通过以下更改快速完成:

def max_r(l: [int]) -> int:
    if len(l) == 1:
        return l[0]
    else:
        result = max_r(l[1:])
        return l[0] if result < l[0] else result

这不仅仅是递归调用函数两次的问题,我不确定确切的增长率,但它似乎是指数的,因为每个额外的递归调用将进行更多额外的递归调用。