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

Ruby递归:得到一些奇怪的输出。!,ruby,recursion,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

这是我的示例输出:

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

有人能帮我理解这个代码吗?我不明白为什么最后一行hello会被打印四次。这是一个递归,当i等于4时,hello只应打印一次。

hello打印4次,因为您在外部调用它一次,然后由于递归再打印3次。所有函数调用都必须退出,因此当它退出时,您会得到一个hello的打印


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

条目将为您提供数组中的值。我认为它是ruby变量。好的..它是一个方法。。。我明白了:你只想数一数数组中0的总数吗?不,我想了解ruby是如何执行这段代码的,以及为什么我会得到这样的输出。!这是你写的还是你在某个地方找到的,你正在试图理解它?4个不同的整数被初始化为零?整数是立即数,因此从不初始化。
"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