堆栈级别太深,无法在 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
处于保护状态。所以它只是跳过那个并用相同的参数递归地调用自己。
当递归调用的堆栈级别太深时,这通常意味着您有一个递归案例,最终会进行相同的调用。我通过在递归调用的开始添加打印来调试它们。一旦我看到导致调用自身的调用,我就会非常仔细地了解该情况下发生的情况。
我在 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
处于保护状态。所以它只是跳过那个并用相同的参数递归地调用自己。
当递归调用的堆栈级别太深时,这通常意味着您有一个递归案例,最终会进行相同的调用。我通过在递归调用的开始添加打印来调试它们。一旦我看到导致调用自身的调用,我就会非常仔细地了解该情况下发生的情况。