-1
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

有人可以帮我理解这段代码吗?我不明白为什么最后一行“hello”被打印了四次。这是一个递归,“hello”应该只打印一次,i等于 4。

4

1 回答 1

2

“hello”被打印了 4 次,因为你在外面调用了一次,然后由于递归又打印了 3 次。所有的函数调用都必须退出,所以当它退出时你会得到一个 hello 的打印。

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

于 2013-10-29T07:38:43.077 回答