给定一个未排序的整数列表和一个目标整数,找出列表中任何一对的差值是否与目标整数的递归相等。
>>> aList = [5, 4, 8, -3, 6]
>>> target = 9
return True
>>> aList = [-1, 5, 4]
>>> target = 3
return False不允许使用For和while循环。
不允许导入。
不允许使用.sort()。
我试过了,但不起作用。
def calculate(aList, target):
if len(aList) == 0 and diff != 0:
return False
startIndex = 0
endIndex = len(aList) - 1
return resursive_sum(aList, target, startIndex, endIndex)
def resursive_sum(aList, targ, start, end):
print(f'Start: {start}')
print(f'End: {end}')
if start == end:
return False
elif aList[end] - aList[start] == targ:
return True
elif aList[end] - aList[start] < targ:
return resursive_sum(values, targ, start, end - 1)
return resursive_sum(aList, targ, start + 1, end)如果我们不能使用循环对列表进行排序,我不确定这个问题如何解决。即使我们可以使用递归对列表进行排序,递归应该是什么样子,以便它可以扫描每一对的差异?
发布于 2021-03-01 02:48:17
假设这只是一个递归练习,它可能不会排除“蛮力”方法。您可以使用递归将每个值与其余值配对,直到找到匹配的差异。
例如:
def hasDiff(L,diff,base=None):
if not L: return False # empty list: no match
if base is None: # search with & without first as base
return hasDiff(L[1:],diff,L[0]) or hasDiff(L[1:],diff)
return abs(base-L[0]) == diff or hasDiff(L[1:],diff,base) # match or recurse
print(hasDiff([5, 4, 8, -3, 6],9)) # True
print(hasDiff([-1, 5, 4],3)) # False当函数使用基值递归时,它只检查列表的其余部分中的第一项,并递归其他值。当函数在没有基值的情况下递归时,它会尝试寻找不涉及第一项的新对(即在列表的其余部分)
https://stackoverflow.com/questions/66361452
复制相似问题