List 如何仅使用三个函数反转列表
如果给我三个功能: 1) empty-返回传递的列表是否为空 2) 拆分-将一个列表拆分为两个大小相等的列表 3) concat-将两个列表连接为一个列表List 如何仅使用三个函数反转列表,list,function,reverse,List,Function,Reverse,如果给我三个功能: 1) empty-返回传递的列表是否为空 2) 拆分-将一个列表拆分为两个大小相等的列表 3) concat-将两个列表连接为一个列表 仅使用这三个函数,如何反转列表?将列表一分为二,递归反转子列表,然后向后合并它们 def reverse(x) { y, z = split(x) if (empty(y) || empty(z)) return x // list has only one element else
仅使用这三个函数,如何反转列表?将列表一分为二,递归反转子列表,然后向后合并它们
def reverse(x) {
y, z = split(x)
if (empty(y) || empty(z))
return x // list has only one element
else
return concat(reverse(z), reverse(y))
}
这听起来像是家庭作业,所以你可能想给它贴上这样的标签。除此之外,
split
在只包含一项的列表上使用时会做什么?我猜拆分一个元素列表会返回一个空列表,而列表中只包含一项。我不太理解递归,你能解释一下它是如何工作的吗?当然。基本上,我们将问题(反转列表)分成两个较小的问题(反转较短的列表),解决这些子问题,并使用部分解决方案来回答原始问题。我们使用相同的算法反转较短的列表-我们拆分它们,反转子列表,等等,直到我们尝试反转一个元素列表时为止;由于这样一个列表等于它本身被颠倒了,所以我们只返回它而不做任何其他更改。拆分一个包含多个元素的列表总是会返回两个较短的列表,因此我们肯定会遇到一个包含一个元素列表的情况——因此,递归总是结束。