Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何仅使用三个函数反转列表_List_Function_Reverse - Fatal编程技术网

List 如何仅使用三个函数反转列表

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

如果给我三个功能: 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
        return concat(reverse(z), reverse(y))

}

这听起来像是家庭作业,所以你可能想给它贴上这样的标签。除此之外,
split
在只包含一项的列表上使用时会做什么?我猜拆分一个元素列表会返回一个空列表,而列表中只包含一项。我不太理解递归,你能解释一下它是如何工作的吗?当然。基本上,我们将问题(反转列表)分成两个较小的问题(反转较短的列表),解决这些子问题,并使用部分解决方案来回答原始问题。我们使用相同的算法反转较短的列表-我们拆分它们,反转子列表,等等,直到我们尝试反转一个元素列表时为止;由于这样一个列表等于它本身被颠倒了,所以我们只返回它而不做任何其他更改。拆分一个包含多个元素的列表总是会返回两个较短的列表,因此我们肯定会遇到一个包含一个元素列表的情况——因此,递归总是结束。