【问题标题】:How to reverse a list using only three functions如何仅使用三个函数来反转列表
【发布时间】:2011-11-02 10:18:23
【问题描述】:

如果给我三​​个函数: 1) empty - 返回传递的列表是否为空 2) split - 将一个列表拆分为两个大小相等的列表 3) concat - 将两个列表连接成一个

只使用这三个函数,如何反转一个列表?

【问题讨论】:

  • 这听起来像是家庭作业,所以你可能想这样标记它。除此之外,split 在只有一项的列表中使用时会做什么?
  • 我猜拆分一个元素列表会返回一个空列表,一个包含一个项目的列表。

标签: list function reverse


【解决方案1】:

将列表一分为二,递归反向子列表,并向后合并。

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))

}

【讨论】:

  • 我对递归不是很了解,你能解释一下它是如何工作的吗?
  • 当然。基本上,我们将我们的问题(反转一个列表)分成两个较小的问题(反转一个较短的列表),解决这些子问题,并使用部分解决方案来回答原始问题。我们使用相同的算法反转我们的较短列表——我们拆分它们,反转子列表等,直到我们尝试反转一个元素列表时;由于这样的列表等于自身反转,我们只需返回它而不进行任何其他更改。拆分一个包含多个元素的列表总是会返回两个较短的列表,所以我们肯定会遇到一个只有一个元素的列表的情况——因此,递归总是结束。
猜你喜欢
  • 2010-12-20
  • 2011-06-19
  • 1970-01-01
  • 2021-07-28
  • 2010-09-17
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多