我正在尝试使用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)
任何帮助将不胜感激!
答案 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