Ruby中的Pascal Triangle

时间:2016-08-08 11:33:30

标签: ruby iteration

我试图编写一种方法来生成Pascal的三角形作为2D数组。例如:

pascal(3) # => [[1],[1,1],[1,2,1]]

这是我的代码:

def pascal n
  pascal = []
  row = [1]
  (1...n).each do |i|
    #first iteration set pascal equal to [[1]] and row to [1,1]
    if i.zero?
      pascal << row
      #sets new value for row for next iteration
      row = [1,1]
    else
      #row generator sets new value for row 
      row = ([0] + row).zip(row + [0]).collect { |a, b| a + b }
      #push row's new value into pascal array
      pascal << row
    end
  end
end 

我知道行生成器工作正常,我用irb测试了自己。输出为1...5,就好像它没有运行一样。

知道我的代码有什么问题吗?请温柔,因为你可以看到我是一个新手。谢谢高级:)

1 个答案:

答案 0 :(得分:0)

ruby​​方法的返回值是评估的最后一件事。在你的情况下,它是eacheach返回它迭代的东西(范围)。您应该从方法中显式返回pascal数组,因为这似乎是您需要的结果。将此行添加到方法的末尾。

      pascal << row
    end # end if
  end # end each

  pascal # < this line

end # end method

这将使pascal成为评估的最后一件事,因此返回方法的值。

JFYI,似乎你的代码破坏了逻辑。如果我们进行上述修正,我们会得到这个(这与您的期望不符)。

pascal(3) # => [[1, 1], [1, 2, 1]]

我留给你调试这个。 :)