【发布时间】:2014-03-28 12:39:48
【问题描述】:
前言:这是我之前参加的数据结构和算法课程的考试。
问题:修改此函数,使其返回 L1 和 L2 中的那些项目的排序列表。例如,给定 [1,2,3,4,5], [0,2,3,5,8] 函数应该返回 [2,3,5]。该函数必须以某种方式使用递归。
def merge(L1, L2):
if L1 == []:
return L2
elif L2 == []:
return L1
elif L1[0] <= L2[0]:
return L1[:1] + merge(L1[1:], L2)
else:
return L2[:1] + merge((L1, L2[1:])
我将函数修改为:
def merge(L1, L2):
if L1 == []:
return L1
elif L2 == []:
return L2
elif L1[0] < L2[0]: #Push L1 forward
return merge(L1[1:], L2)
elif L1[0] > L2[0]: #Push L2 forward
return merge(L1, L2[1:])
elif L1[0] == L2[0]: #If same element, return element
return L1[:1] + merge(L1[1:], L2[1:])
我使用基本的 if 语句来推动列表,确保每个列表中的每个元素都被相互检查。时间不早了,我之前的代码一直返回 [2,3,5,8] 因为,我原来有:
if L1 == []:
return L2
elif L2 == []:
return L1
当 L1 用尽时,它会返回 L2 的其余部分。然后我正在重新输入代码并意外输入:
if L1 == []:
return L1
elif L2 == []:
return L2
它成功了!输出是 [2,3,5] 但对我来说没有意义
我的问题是:
为什么返回用尽列表的前两个 if 语句给我输出 [2,3,5]?
为什么返回一个空列表会中断递归函数?
最后,如果我的列表在递归函数中用尽,有没有办法打破 if 语句链?
【问题讨论】:
-
我不明白你问题的最后一部分。你能解释一下吗?
-
对不起,最后一个问题可以忽略。这是一个重复。在解释之前,我不明白前两个 if 语句是如何工作的。它们是我的基本情况。
标签: python list if-statement recursion unique