Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 使用递归检查列表中的每一对,如果它们的和为负数,则返回True,否则返回False_List_Python 3.x_Recursion - Fatal编程技术网

List 使用递归检查列表中的每一对,如果它们的和为负数,则返回True,否则返回False

List 使用递归检查列表中的每一对,如果它们的和为负数,则返回True,否则返回False,list,python-3.x,recursion,List,Python 3.x,Recursion,这就是我目前所拥有的 def negative_sum(L): if len(L) == 2: if L[0] + L[1] <0: return True else: return False else: return negative_sum(L[0] + negative_sum(L[1:])) def负和(L): 如果len(L)==2: 如果L[0]+L[1]

这就是我目前所拥有的

def negative_sum(L):  
    if len(L) == 2:  
        if L[0] + L[1] <0:
            return True
        else:
            return False
    else:
        return negative_sum(L[0] + negative_sum(L[1:]))
def负和(L):
如果len(L)==2:

如果L[0]+L[1]A
while
循环相当于使用单个执行帧的“尾部递归”。有些问题更容易用递归表示,有些问题则更容易用循环表示。使用嵌套的
for
循环可以轻松生成对

def pairs1(seq``):
    n = len(seq)
    pairlist = []
    for i in range(0, n-1):
        for j in range(i+1, n):
            pairlist.append((seq[i],seq[j]))
    return pairlist

inp = (1, 2, 3)
out = [(1,2), (1,3), (2,3)]
assert pairs1(inp) == out
我通常使用
yield
而不是
pairlist.append
。注意代码中包含了一个测试。作为中间步骤,转换为单个
while
循环

def pairs2(seq):
    jmax = len(seq) - 1
    pairlist = []
    i = 0
    j = i+1
    while i < jmax:
        pairlist.append((seq[i],seq[j]))
        if j < jmax:
            j += 1
        else:
            i += 1
            j = i+1
    return pairlist

assert pairs2(inp) == out
在Python中,所有添加项中的复制都将O(N)函数转换为O(N**2)函数,因此我不会这样做。

看一看。
def pairs3(seq):
    jmax = len(seq) - 1
    pairlist = []
    i = 0
    j = i+1
    def inner():
        nonlocal i, j
        if i < jmax:
            pairlist.append((seq[i],seq[j]))
            if j < jmax:
                j += 1
            else:
                i += 1
                j = i+1
            inner()
    inner()
    return pairlist

assert pairs3(inp) == out
def pairs4(seq, i, j, pairlist):
    jmax = len(seq) - 1
    if i < jmax:
        pairlist.append((seq[i],seq[j]))
        if j < jmax:
            return pairs4(seq, i, j+1, pairlist)
        else:
            return pairs4(seq, i+1, i+2, pairlist)
    else:
        return pairlist

assert pairs4(inp, 0, 1, []) == out
        return pairs4(seq, i, j+1, pairtuple + ((seq[i],seq[j])))