Ruby:堆栈级别太深(SystemStackError)maxlimit

lok*_*100 4 ruby stack

以下是我的示例代码:

def test(v)
  test(v-1) if v > 0
  p v
end
Run Code Online (Sandbox Code Playgroud)

如果我打电话test(11893)它工作正常.如果我有v > 11893,那就是扔SystemStackError.如何增加此错误的限制?

Ale*_*kin 6

MRI 默认关闭尾递归优化.但有人可能会把它打开:

RubyVM::InstructionSequence.compile_option = {
  tailcall_optimization: true,
  trace_instruction: false
}
Run Code Online (Sandbox Code Playgroud)

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

def test(v)
  return unless v > 0
  p v
  test(v-1) 
end
Run Code Online (Sandbox Code Playgroud)