堆栈级别太深,无法在 Ruby 中进行合并排序

Stack Level Too Deep for Merge Sort in Ruby

我在 Ruby 中练习合并排序 运行 时遇到一个错误,我的堆栈级别太深了。这是代码:

def sort(numbers)

    num_length = numbers.length
    if num_length <= 1
        numbers
    end

    half_of_elements = (num_length / 2).round

    left = numbers.take(half_of_elements)
    right = numbers.drop(half_of_elements)

    sorted_left = sort(left)
    sorted_right = sort(right)

    print sorted_left, sorted_right
    #merge(sorted_left, sorted_right)
end

我已经注释掉了 merge 方法,因为我只想查看排序后的数组,但我的代码总是卡住,并且出现错误。谁能帮我找出问题所在?

您未能return numbers处于保护状态。所以它只是跳过那个并用相同的参数递归地调用自己。

当递归调用的堆栈级别太深时,这通常意味着您有一个递归案例,最终会进行相同的调用。我通过在递归调用的开始添加打印来调试它们。一旦我看到导致调用自身的调用,我就会非常仔细地了解该情况下发生的情况。