首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用递归查找成对的目标差异

使用递归查找成对的目标差异
EN

Stack Overflow用户
提问于 2021-02-25 10:13:46
回答 6查看 125关注 0票数 5

给定一个未排序的整数列表和一个目标整数,找出列表中任何一对的差值是否与目标整数的递归相等。

代码语言:javascript
复制
>>> aList = [5, 4, 8, -3, 6]
>>> target = 9
return True

>>> aList = [-1, 5, 4]
>>> target = 3
return False

不允许使用For和while循环。

不允许导入。

不允许使用.sort()。

我试过了,但不起作用。

代码语言:javascript
复制
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)

如果我们不能使用循环对列表进行排序,我不确定这个问题如何解决。即使我们可以使用递归对列表进行排序,递归应该是什么样子,以便它可以扫描每一对的差异?

EN

Stack Overflow用户

发布于 2021-03-01 02:48:17

假设这只是一个递归练习,它可能不会排除“蛮力”方法。您可以使用递归将每个值与其余值配对,直到找到匹配的差异。

例如:

代码语言:javascript
复制
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

当函数使用基值递归时,它只检查列表的其余部分中的第一项,并递归其他值。当函数在没有基值的情况下递归时,它会尝试寻找不涉及第一项的新对(即在列表的其余部分)

票数 1
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66361452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档