Project1

标题: 一个关于尾递归的问题,是我的姿势不对吗? [打印本页]

作者: taroxd    时间: 2014-12-6 21:41
标题: 一个关于尾递归的问题,是我的姿势不对吗?
第一次知道 Ruby 可以实现尾递归,兴冲冲地试了一下,结果还是 stack level too deep……

是我哪里的姿势不对么?

RUBY 代码复制
  1. RubyVM::InstructionSequence.compile_option = {
  2. tailcall_optimization: true,
  3. trace_instruction: false
  4. }
  5.  
  6. def add(a, b)
  7.   return a if b == 0
  8.   add(a + 1, b - 1)
  9. end
  10.  
  11. p add(5, 10000)

作者: 路路    时间: 2014-12-7 00:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: 路路    时间: 2014-12-7 10:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: taroxd    时间: 2014-12-7 10:17
本帖最后由 taroxd 于 2014-12-7 10:19 编辑
路路 发表于 2014-12-7 10:12
@taroxd
无视前面几行是你这样的写法当前编译没有生效


哦,知道了。

其实我当时也怀疑过这个问题,然后写成了这样——
RubyVM::InstructionSequence.compile(source, '', '', 0, tailcall_optimization: true).eval

当时忘了关 trace_instruction 了,然后后来就没想过这个问题……

果然是我的姿势不对,感谢回答~
作者: xiaorang    时间: 2015-5-3 18:59
不带参数的才是尾递归,其实就是循环而已。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1