我有一个清单:
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))
答案 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)