【发布时间】:2019-03-23 18:51:36
【问题描述】:
我正在尝试编写一个纯递归函数,如果两个未排序列表的长度相同并且包含相同的元素,它将返回 True。我不允许使用任何迭代,只能使用递归。以下是它应该做什么的示例:
>>> SameStuff(['Hello',1,2,3],[3,2,1,'Hello'])
True
>>> SameStuff(['HELLO',1,2,3],[3,'two',1,'Hello'])
False
>>> SameStuff([1,2],[])
False
我正在为我的递归函数的逻辑而苦苦挣扎,并且缺少一些元素。这是我所拥有的:
def SameStuff(list1,list2):
if len(list1)!=len(list2):
return False
if #some base case:
#return True?
if list1[0] in list2:
return SameStuff(list1[1:],list2)
else:
return False
【问题讨论】:
-
大概基本情况是两个列表都是空的
-
“无序列表”是什么意思?列表本质上是有序的。你的意思是未排序?
-
第一种情况和第三种情况一起表示这行不通。一旦您调用从 one 列表中删除一个元素的函数,它将返回 False。
-
@mkrieger - 是的,递归的情况是错误的。我认为你也不能在 1-liner 中做到这一点。但这就是需要解决的所有问题,除了添加两个列表都为空的基本情况。
-
要编写递归函数,先从特定情况(空列表、一个元素的列表等)开始,然后是名义情况。
标签: python python-3.x list recursion