Python 是否有一种非递归的方式将每个列表元素分离到它们自己的列表中?

Python 是否有一种非递归的方式将每个列表元素分离到它们自己的列表中?,python,list,recursion,elements,Python,List,Recursion,Elements,我在看维基百科的伪代码和其他网页,比如sortvis.org和sorting-algorithm.com上的merge-sort,看到了合并使用递归的准备过程。 我很好奇,想知道是否有一种非递归的方法来实现它。 对于列表中的每个i元素,i=[i-th element],可能类似于a 我的印象是递归是最小化的,因为它是不受欢迎的,所以我想到了这个问题 以下是Wikipedia中合并排序递归部分的伪代码示例: function merge_sort(list m) // if list si

我在看维基百科的伪代码和其他网页,比如sortvis.org和sorting-algorithm.com上的merge-sort,看到了合并使用递归的准备过程。 我很好奇,想知道是否有一种非递归的方法来实现它。 对于列表中的每个i元素,i=[i-th element],可能类似于a

我的印象是递归是最小化的,因为它是不受欢迎的,所以我想到了这个问题

以下是Wikipedia中合并排序递归部分的伪代码示例:

function merge_sort(list m)
    // if list size is 1, consider it sorted and return it
    if length(m) <= 1
        return m
    // else list size is > 1, so split the list into two sublists
    var list left, right
    var integer middle = length(m) / 2
    for each x in m up to middle
         add x to left
    for each x in m after or equal middle
         add x to right
    // recursively call merge_sort() to further split each sublist
    // until sublist size is 1
    left = merge_sort(left)
    right = merge_sort(right)
是合并排序的非递归变体

有关更详细的伪代码实现,请参见本文

middle = len(lst) / 2
left = lst[:middle]
right = lst[middle:]
列表切片可以很好地工作。

作为一种旁白-递归本身并不是不可取的

如果堆栈空间有限,递归是不可取的。您害怕堆栈溢出吗?;-,或者在某些情况下,函数调用的时间开销非常重要


在大多数情况下,这些条件并不成立;代码的可读性和可维护性将更加相关。在我看来,像合并排序这样的算法在递归表达时更有意义。

感谢Reddy改进了格式。这是一个算法问题,而不是一个实现或语言问题,应该相应地加以识别/标记。啊,我以为你在创建列表的左/右拆分时指的是递归。对于实际排序的非递归,使用unutbu提到的bottum up。我明白了。谢谢你的洞察力。