python - 递归搜索列表的最大值

Hak*_*kim 0 python recursion

任何人都可以告诉我为什么这段代码会返回RuntimeError: maximum recursion depth exceeded:

def maximum(tab, indDeb, indFin):
    if (indDeb == indFin):
        return indDeb
    else:
        m = (indDeb + indFin) / 2
        print "m = ", m
        k1 = maximum(tab, indDeb, indFin)
        k2 = maximum(tab, m+1, indFin)
        if (tab[k1] > tab[k2]):
            return k1
        else:
            return k2

if __name__ == "__main__":
    maximum([1, 2, 3, 4, 5], 0, 4)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

maximum你内部递归调用函数而不改变参数:

def maximum(tab, indDeb, indFin):
    # ...

    k1 = maximum(tab, indDeb, indFin)
Run Code Online (Sandbox Code Playgroud)

这不能不导致无限递归.

也许您想要限制上层索引:

k1 = maximum(tab, indDeb, m)
Run Code Online (Sandbox Code Playgroud)


Wil*_*aul 5

这条线:

k1 = maximum(tab, indDeb, indFin)
Run Code Online (Sandbox Code Playgroud)

应该:

k1 = maximum(tab, indDeb, m)
Run Code Online (Sandbox Code Playgroud)