对于我的演算法课来说,这是一个关于分而治之的试题。下面是我用python3.5编写的代码。
def majElement(L):
tally = 0
if len(L) == 1:
return 1
for i in range(len(L)):
tally = majElement(L[i:len(L)]) + majElement(L[len(L)/2:])
if tally > (len(L)/2):
print(L[i])此代码将导致堆栈溢出。我还没有达到我的基本目标。如何停止无限递归调用?
发布于 2016-03-15 19:11:26
第一个问题是,您只返回一个基本情况下的值;其余时间,您将打印一个值并返回None。
第二,第一次递归调用是在i == 0时进行的,这意味着L[i:len(L)]与L相同,因此您并没有明显减少问题的大小。至少,您需要for i in range(1, len(L)),但我怀疑您没有正确地将问题分解为子问题。(您不应该像建议的那样进行那么多的递归调用。)
https://stackoverflow.com/questions/36019906
复制相似问题