2013-10-04 26 views
1

我試圖提高使用項目歐拉一系列的問題,我的紅寶石技能,我想知道爲什麼這個代碼不會對這個問題的工作:「即使是斐波那契數,問題2」如何在Ruby中正確使用for循環?

在每個新學期Fibonacci序列是通過添加前兩個項來生成的。用1和2開始,前10項將是:

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

通過考慮在Fibonacci序列中,其值不超過4萬元計算,發現即使值項的總和。

我的代碼:

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

如果您剛開始使用Ruby,我建議您查看Ruby Koans。這是一種習慣語言方式的有趣方式。

即表示您的代碼沒有正確計算斐波那契數,它不會計算斐波那契數,也有其他錯誤(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 
4

在行:

for e in n 

400萬被取代N,所以你說:

for e in 4000000 

這不是一個有效的語句 - 你不能在一個整數上迭代。

如果你想通過所有的值迭代從0到n,嘗試:

for e in (0..n) 

通過值迭代這在範圍 0到n。

但是,這裏有一個更深層的問題。它看起來好像你想要迭代到4000000的值,但是你的代碼會遍歷第一個4000000斐波那契數,這比你想要的要多得多。你可以考慮說:

while second <= 4000000 
+0

謝謝你的建議! – Jamaal

相關問題