如何在Ruby中正确使用for循环?

时间:2013-10-04 03:06:08

标签: ruby loops for-loop project

我正在尝试使用Project Euler系列问题来提高我的Ruby技能,我想知道为什么这段代码不能用于这个问题:“甚至Fibonacci数字,问题2”

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和。

我的代码:

def fibo(n)
  first, second, sequence = 0,1,[]
  for e in n
    first, second = second, first + second
    sequence << e if e%2 == 0
  end
  sequence.inject(:+)
end

puts fibo(4000000)

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

在行中:

for e in n

4,000,000正在替代n,所以你说:

for e in 4000000

这不是一个有效的语句 - 你不能迭代一个整数。

如果您想迭代从0到n的所有值,请尝试:

for e in (0..n)

这会将范围 0中的值迭代到n。

然而,这里有一个更深层次的问题。它看起来好像要迭代到值4000000,而是你的代码将遍历前4000000个Fibonacci数字,这比你想要的要多得多。你可能想考虑一下:

while second <= 4000000

答案 1 :(得分:2)

如果您刚开始使用Ruby,我建议您查看Ruby Koans。这是一种习惯语言方式的有趣方式。

那说你的代码没有正确计算Fibonacci,它没有对Fibonacci数求和,还有其他一些错误(for e in n无效,因为n不是枚举器类型)。修复如下:

def fibo(n)
  first, second, sum = 0, 1, 0
  loop do
    first, second = second, first + second
    sum += second if second%2 == 0
    break if second >= n
  end
  sum
end