我正在尝试在返回值(x,y)
或(z,2)
之后停止下面的for循环,以便值i
不会继续增加,并且只是在if
时暂停{1}}或elif
条件是第一个
def maxPalindrome(theList):
# students need to put some logic here
maxcomplist = theList[:]
maxcomplist.reverse()
control = len(theList) - 1
# exit if maxPalindrome is True
for i in range(control):
if maxcomplist[:] == theList[:]:
x = 0
y = len(theList)
return (x, y)
break
elif maxcomplist[i:control] == theList[i:control]:
successList = theList[i:control]
z = i
w = len(theList) - z - 1
return (z, w)
我该如何做到这一点?
答案 0 :(得分:1)
正如我在评论中写的那样:该功能根本不是递归的 递归意味着函数调用自身来完成它的目的。这个调用可以是间接的,这意味着该函数使用辅助函数,它将再次调用第一个函数 但是你的代码并没有涵盖这两种情况。
递归函数总是具有某种架构:
被调用后的第一件事应该是测试,如果已达到原始情况(或选项中的一个原始情况)。如果是的话,它会返回。
如果没有,它会计算所需的一切,并将此结果再次传递给自己, 直到达到原始情况,嵌套函数调用将一个接一个地完成。
递归的一个众所周知的用法是quicksort算法:
def quicksort(alist):
if len(alist) < 2:
return alist # primitive case: a list of size one is ordered
pivotelement = alist.pop()
# compute the 2 lists for the next recursive call
left = [element for element in alist if element < pivotelement]#left = smaller than pivotelemet
right = [element for element in alist if element >= pivotelement]#left = greater than pivotelemet
# call function recursively
return quicksort(left) + [pivotelement] + quicksort(right)
所以“停止”必须是原始案例的回归。这对于递归至关重要。你不能以某种方式爆发。
答案 1 :(得分:0)
我不明白这个问题 - 如果我做对了,那就是你想要的。如果您return
,该功能将停止运行。
除了这个答案之外还有一些评论:
同样,我无法看到递归调用函数的位置,也看不出
exit if maxPalindrome is True
装置。 (这可能是评论吗?)
此外,maxcomplist[:]==theList[:]
对我来说没有多大意义,似乎浪费时间和记忆,并且在每个迭代循环中进行这种比较并不会使它更快