斐波那契偶数之和
Sum of Fibonacci even number
我目前正在 Euler 项目网站上从事小型 ruby 项目。我的任务是计算小于 4 百万的斐波那契数。不幸的是,我的代码中有一个小错误,因为当我更改限制 e.i 时。到 100,它打印 188 而不是 44。令人惊讶的是这个程序给出了正确的答案,但我真的不知道我的代码在什么方面是错误的。
a=[]; a[0]=1; a[1]=1;
i = 1
while a[-1] < 608
a[i+1]=(a[i] + a[i-1])
i +=1
end
x = 0
a.each do |num|
if num % 2 == 0
x += num
end
end
print "The sum of even Fibonacci number is: #{x}"
问题来自第二次迭代。当其中一个数字超过限制时(即当最后一个数字 > 100 时),您将停止生成斐波那契数列。
原来经过生成步骤,数组是[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
,这就解释了你的错误结果188 = 144+44.
因此,您的代码仅在生成的最后一个元素为奇数时才有效,这就是欧拉问题测试中的情况。为了纠正这个问题,将你的第二次迭代从 a.each do ... end
更改为 a[0...-1].each do ... end
为了遍历除最后一个元素之外的数组。
顺便说一句,我建议您不要在这里使用数组。
你只是在浪费内存,ruby 正在浪费时间扩展它(这可以通过 Array.new(ARRAY_SIZE)
解决)。
因为你实际上并不需要斐波那契数列,你可以只需要这样的东西:
LIMIT = 4_000_000
a = 1
b = 1
next_number = a + b
sum = 0
while next_number < LIMIT
sum += next_number if next_number.even?
a = b
b = next_number
next_number = a + b # or next_number += a
end
更新。哦,天哪,我不知道为什么这个问题会出现在我的提要中。抱歉发了死帖:)
我目前正在 Euler 项目网站上从事小型 ruby 项目。我的任务是计算小于 4 百万的斐波那契数。不幸的是,我的代码中有一个小错误,因为当我更改限制 e.i 时。到 100,它打印 188 而不是 44。令人惊讶的是这个程序给出了正确的答案,但我真的不知道我的代码在什么方面是错误的。
a=[]; a[0]=1; a[1]=1;
i = 1
while a[-1] < 608
a[i+1]=(a[i] + a[i-1])
i +=1
end
x = 0
a.each do |num|
if num % 2 == 0
x += num
end
end
print "The sum of even Fibonacci number is: #{x}"
问题来自第二次迭代。当其中一个数字超过限制时(即当最后一个数字 > 100 时),您将停止生成斐波那契数列。
原来经过生成步骤,数组是[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
,这就解释了你的错误结果188 = 144+44.
因此,您的代码仅在生成的最后一个元素为奇数时才有效,这就是欧拉问题测试中的情况。为了纠正这个问题,将你的第二次迭代从 a.each do ... end
更改为 a[0...-1].each do ... end
为了遍历除最后一个元素之外的数组。
顺便说一句,我建议您不要在这里使用数组。
你只是在浪费内存,ruby 正在浪费时间扩展它(这可以通过 Array.new(ARRAY_SIZE)
解决)。
因为你实际上并不需要斐波那契数列,你可以只需要这样的东西:
LIMIT = 4_000_000
a = 1
b = 1
next_number = a + b
sum = 0
while next_number < LIMIT
sum += next_number if next_number.even?
a = b
b = next_number
next_number = a + b # or next_number += a
end
更新。哦,天哪,我不知道为什么这个问题会出现在我的提要中。抱歉发了死帖:)