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

如何在Ruby中正确使用for循环?,ruby,loops,for-loop,project,Ruby,Loops,For Loop,Project,我正在尝试使用ProjectEuler系列问题来提高我的Ruby技能,我想知道为什么这段代码不适用于这个问题:“即使是斐波那契数,问题2” 斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和 我的代码: def fibo(n) first, second, sequence = 0,1,[] for e i

我正在尝试使用ProjectEuler系列问题来提高我的Ruby技能,我想知道为什么这段代码不适用于这个问题:“即使是斐波那契数,问题2”

斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和

我的代码:

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)
def fibo(n)
第一,第二,顺序=0,1,[]
对于e in n
第一,第二=第二,第一+第二
sequence我建议你先看看是否从Ruby开始。这是一种适应语言方式的有趣方式

也就是说,您的代码没有正确计算斐波那契数,它没有对斐波那契数求和,并且还有一些其他错误(
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
如果你是从Ruby开始,我建议你去看看。这是一种适应语言方式的有趣方式

也就是说,您的代码没有正确计算斐波那契数,它没有对斐波那契数求和,并且还有一些其他错误(
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
行中:

for e in n
4000000正被n取代,所以你说:

for e in 4000000
这不是有效的语句-不能对整数进行迭代

如果要遍历从0到n的所有值,请尝试:

for e in (0..n)
这将遍历范围0到n中的值

然而,这里有一个更深层次的问题。看起来好像您希望迭代到4000000,但是相反,您的代码将迭代前4000000个斐波那契数,这远远超出您的需要。你可能会想说:

while second <= 4000000
而第二个在行中:

for e in n
4000000正被n取代,所以你说:

for e in 4000000
这不是有效的语句-不能对整数进行迭代

如果要遍历从0到n的所有值,请尝试:

for e in (0..n)
这将遍历范围0到n中的值

然而,这里有一个更深层次的问题。看起来好像您希望迭代到4000000,但是相反,您的代码将迭代前4000000个斐波那契数,这远远超出您的需要。你可能会想说:

while second <= 4000000

while second感谢您的建议!谢谢你的建议!