构建一个递归函数,以验证每个函数
i<len(lis)/2 : lis[i]+lis[len(lis)-i-1] = x
def controlTest(list,x):
#@param list: list of integers
#@param x: integer
#@return: bool
for i in range(0,len(list)/2):
if list[i]+list[len(list)-i-1]==x:
return controlTest(list[1:len(list)-1],x)
else:
return list
我希望此函数的输出为一个empy列表[],但是for循环会跳过递归调用的步骤
示例:如果
list= [1, 5, 3, 6, 4, 8]
和x = 9
,则函数返回空列表[],因为1 + 8 = 5 + 4 = 3 + 6 = 9
答案 0 :(得分:2)
假设您要返回列表的不满足此条件的内部部分,则可以进行以下操作:
def controlTest(l, x):
if len(l) < 2:
return [] # base case
elif l[0] + l[-1] != x:
return l # failure
else:
return controlTest(l[1:-1], x) # recursion
这可以更简短一些,但是我扩展了定义以强调缺少的元素。在递归函数中,通常不需要循环,因为递归本身提供了循环效果。
这返回了我认为该问题的预期结果:
>>> controlTest([1,5,3,6,4,8], 9)
[]
>>> controlTest([1,5,4,6,4,8], 9)
[4, 6]
答案 1 :(得分:0)
问题是,如果输入数组的长度为0,则for循环永远不会运行,因此您没有return语句。这样,如果检查成功,则最后一个递归调用将在空数组上运行,并且不返回任何内容,因此您将得到None
的答案。
我还必须在此行上将一个强制类型转换为int
len(list)/2 -> int(len(list)/2)
使代码运行。
您可以只在如下所示的for循环之外的末尾添加一个额外的return
,或者可以检查空数组。
def controlTest(list,x):
#@param list: list of integers
#@param x: integer
#@return: bool
for i in range(0,int(len(list)/2)):
if list[i]+list[len(list)-i-1]==x:
return controlTest(list[1:len(list)-1],x)
else:
return list
return []