Python 是否有一种非递归的方式将每个列表元素分离到它们自己的列表中?
我在看维基百科的伪代码和其他网页,比如sortvis.org和sorting-algorithm.com上的merge-sort,看到了合并使用递归的准备过程。 我很好奇,想知道是否有一种非递归的方法来实现它。 对于列表中的每个i元素,i=[i-th element],可能类似于a 我的印象是递归是最小化的,因为它是不受欢迎的,所以我想到了这个问题 以下是Wikipedia中合并排序递归部分的伪代码示例: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
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。我明白了。谢谢你的洞察力。