从迭代到递归 - 重新排序列表

时间:2014-01-29 14:00:51

标签: python recursion

我有一个清单:

L = [0,'a','b','c']

如果我运行以下内容:

sortedList = []
while len(L) > 0:
    item = L.pop()
    sortedList.append(item)
print(sortedList)

输出:

['c', 'b', 'a', 0]

作为一个试图理解递归的简单练习,我想把上面的内容放在一个递归函数中。 我有两次尝试 - 如何修复其中一个或两个 - 或者是否有递归解决方案?

1

def extract(Seq):
    if Seq == [0]:
        return s.append(0)
    else:
        extract(Seq[:len(Seq)-1])

        if not s: s = []
        x=Seq.pop()
        return s.append(x)

M = [0,'a','b','c']
print(extract(M))

2

def extract2(Seq):
    s=[]
    if Seq:
        return s.append(Seq.pop())
        extract2(Seq)

N = [0,'a','b','c']
print(extract(N))

1 个答案:

答案 0 :(得分:3)

递归解决方案可能是:

def extract3(seq):
    if not seq:
        return seq
    return [seq.pop()] + extract3(seq)

然而,这会修改输入列表,这可能不是您想要的。因此,最好根据需要对输入列表进行切片:

def extract4(seq):
    if not seq:
        return seq
    return [seq[-1]] + extract4(seq[:-1])

其中seq[-1]表示“取seq的最后一个元素”而seq[:-1]表示“取最后一个seq的所有元素”。函数extract4通过根据需要获取元素而不修改给定序列seq来构建新列表。

您还可以使用将使用extract5(N, [])

调用的累加器
def extract5(seq, acc):
    if not seq:
        return acc
    acc.append(seq[-1])
    return extract5(seq[:-1], acc)