ruby : stack level too deep (SystemStackError) maxlimit

标签 ruby stack

下面是我的示例代码:

def test(v)
  test(v-1) if v > 0
  p v
end

如果我调用 test(11893) 它工作正常。 如果我有 v > 11893,它会抛出 SystemStackError。 如何增加此错误的限制?

最佳答案

MRI 有 tail recursion优化默认关闭。但是一个人可能 turn it on :

RubyVM::InstructionSequence.compile_option = {
  tailcall_optimization: true,
  trace_instruction: false
}

此外,代码本身必须使用尾递归:

def test(v)
  return unless v > 0
  p v
  test(v-1) 
end

关于 ruby : stack level too deep (SystemStackError) maxlimit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49714780/

相关文章:

mysql - Require 'mysql' 在 Textmate ruby​​ 脚本中失败,但在终端的 irb 中工作

java - 使用堆栈和java进行括号匹配

.net - IIS 中的 .NET 代码出现堆栈溢出,但 Winforms 中没有

performance - 用于实现堆栈的链表与动态数组

c++ - QThread 中的堆栈大小

c - 变量周围的堆栈已损坏 - C

css - sass 驱动版本的 Bootstrap 的简单最小化版本中哪个版本的 Bootstrap 更适合在 Rails 应用程序中使用

ruby-on-rails - 比较两次而不考虑相关日期 - Ruby

ruby - Kanwei minheap 慢 ruby

ruby - 如何使用 ruby​​ 获取字符串中所有标记的字符?