[英]How can I use recursion to add two lists together?
例如,说我有
a = [1, 3, 9]
b = [1, 2, 4, 5]
我想按顺序返回一个新列表(n):
n = [1,1,2,3,4,5,9] by using recursion.
我曾尝试使用标准递归方法执行此操作,但我的问题是,每当我在递归 function 中创建一个新列表时,它的值总是在递归调用期间再次设置为 []。 有没有办法让 n 不是 go 恢复为空?
def recur(a,b):
if a[0] <= b[0]:
n.append(a[0])
return (merge(a[1:], b))
一种方法(在我的脑海中,可能有错误):
def merge_sorted(a, b):
if not a:
return b
if not b
return a
if a[0] < b[0]:
return [a[0]] + merge_sorted(a[1:], b)
return [b[0]] + merge_sorted(a, b[1:])
如果学习递归是您的目标,我建议实施几个版本,并尝试自己找到一些版本。 一个版本可能与您开始的版本类似 - 在 3d 列表中返回结果(因此您需要一个 3d 参数。另一个选项是我个人不喜欢的全局)。 我的食谱总是一样的:
merge_sorted
的结果返回列表的正确合并。这与归纳证明非常相似(相同?)。
你可以这样做:
def recur(array):
ret = []
if len(array) <= 1:
return array;
half = int(len(array) / 2)
lower = recur(array[:half])
upper = recur(array[half:])
lower_len = len(lower)
upper_len = len(upper)
i = 0
j = 0
while i != lower_len or j != upper_len:
if( i != lower_len and (j == upper_len or lower[i] < upper[j])):
ret.append(lower[i])
i += 1
else:
ret.append(upper[j])
j += 1
return ret
a = [1, 3, 9]
b = [1, 2, 4, 5]
print(a+b) #[1, 3, 9, 1, 2, 4, 5]
print(recur(a+b)) #[1, 1, 2, 3, 4, 5, 9]
a = [1, 3, 9]
b = [1, 2, 4, 5]
c=[]
def recurse(a,b,c):
if len(a)==0 and len(b)==0:
pass
elif len(a)==0 and len(b)!=0:
c.extend(b)
elif len(a)!=0 and len(b)==0:
c.extend(a)
elif a[0]<b[0]:
c.append(a[0])
del a[0]
recurse(a,b,c)
else:
c.append(b[0])
del b[0]
recurse(a,b,c)
recurse(a,b,c)
解释:
1.创建一个空列表c
2.1st If:如果'a'和'b'都为空,则递归完成
3.1st elif:如果只有'a'为空,则将'b'的所有值扩展()到'c'&递归完成
4.2nd elif:类似于 1st elif,反之亦然
5.如果两者都不为空,请检查“a”和“b”的第一个元素。 以较低者为准,append 到 'c' 并删除,递归调用 'recurse'
尽管它认为 'a' 和 'b' 都按照上面的示例进行排序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.