代码之家  ›  专栏  ›  技术社区  ›  lokanadham100

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

  •  4
  • lokanadham100  · 技术社区  · 6 年前

    以下是我的示例代码:

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

    如果我打电话 test(11893) 它工作得很好。 如果我有 v > 11893 ,它是投掷 SystemStackError 。 如何增加此错误的限制?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Aleksei Matiushkin    6 年前

    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