如何在ruby中逐步添加

时间:2015-02-08 17:40:53

标签: ruby

如何逐步添加?

x = 1

while x < 365 
  x+=x
  puts x
end 

但这不是正确的

谢谢!

2 个答案:

答案 0 :(得分:3)

从数学上讲,你正在寻找n = 1到y的n的总和。 According to WolframAlpha,此总和可以减少到y(y + 1)/ 2。因此,您可以将其计算为:

x = 365*(365+1)/2 #=> 66795

不需要任何循环。这种代码方式更有效率; O(1)代替O(n)。

答案 1 :(得分:1)

如果我正确理解你的需要:

(1..365).reduce(0) { |memo, i| memo + i }
#⇒ 66795

或者,简短形式(@JörgW。Mittag):

(1..365).reduce(:+)

我们在reduce使用标准Range程序。首先,我们构造范围,包含从1到365的整数。然后我们迭代这些整数,带有总数(根据ruby约定命名为memo。)