我想定义一个递归函数来合并两个排序列表(这两个列表已排序)并返回一个新列表,其中包含两个参数列表中的所有值,并且顺序递增。我知道我可以使用 list.extend() 和 sorted() 来获取它,但我不想使用它们。我只想做一些关于递归的练习。
例如:
if a = [1,2,3,4], b = [5,6,7,8]
print(function(a,b))
[1,2,3,4,5,6,7,8]
这是我的代码:
def combine(a:list, b:list):
alist = []
if a == [] and b == []:
return alist
if a != [] and b == []:
return alist + a
if a == [] and b != []:
return alist + b
if a != [] and b != []:
if a[0] <= b[0]:
alist.append(a[0])
return combine(a[1:], b)
if a[0] > b[0]:
alist.append(b[0])
return combine(a, b[1:])
return alist
我总是得到 [5,6,7,8]。我应该怎么做才能得到[1,2,3,4,5,6,7,8]?
请您参考如下方法:
只是一个更简单的版本:
def combine(a, b):
if a and b:
if a[0] > b[0]:
a, b = b, a
return [a[0]] + combine(a[1:], b)
return a + b
测试:
>>> combine([1,3,6,8], [2,4,5,7])
[1, 2, 3, 4, 5, 6, 7, 8]
