Ruby递归:获得一些奇怪的输出。

时间:2013-10-29 07:16:56

标签: ruby recursion

class Array
  def total_zeros index = entries.length-1, total = 0
    p "total entries = #{entries.length}"
    i = 0
    if index >= 0
      p "in if block"
      i = i+1
      total_zeros index-1, total
    end
    p "hello #{i}"
  end
end

a = [0,1,2]
p a.total_zeros

这是我的示例输出:

"total entries = 3"
"in if block"
"total entries = 3"
"in if block"
"total entries = 3"
"in if block"
"total entries = 3"
"hello 0"
"hello 1"
"hello 1"
"hello 1"
nil

有人可以帮我理解这段代码吗?我无法理解为什么最后一行“你好”被打印四次。这是一个递归,只有i等于4才能打印“你好”。

1 个答案:

答案 0 :(得分:2)

“你好”打印4次,因为你在外面调用一次,然后再由于递归调用3次。所有的函数调用都必须退出,所以你可以打印hello。

至于为什么i没有值4 - i的范围仅限于方法。该方法被调用4次,4个不同的整数初始化为零并递增1。