我试图编写一种方法来生成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
,就好像它没有运行一样。
知道我的代码有什么问题吗?请温柔,因为你可以看到我是一个新手。谢谢高级:)
答案 0 :(得分:0)
ruby方法的返回值是评估的最后一件事。在你的情况下,它是each
。 each
返回它迭代的东西(范围)。您应该从方法中显式返回pascal
数组,因为这似乎是您需要的结果。将此行添加到方法的末尾。
pascal << row
end # end if
end # end each
pascal # < this line
end # end method
这将使pascal
成为评估的最后一件事,因此返回方法的值。
JFYI,似乎你的代码破坏了逻辑。如果我们进行上述修正,我们会得到这个(这与您的期望不符)。
pascal(3) # => [[1, 1], [1, 2, 1]]
我留给你调试这个。 :)