2016-07-05 50 views
0

我已經搜索了堆棧溢出,並沒有找到我的問題,所以我認爲這將是安全的發佈。我正在編寫一個打印Fibonacci序列的前10個整數的標準代碼段,然後將這些前10個整數值加在一起並打印總和。我寫的代碼基本上是可行的,但我試圖在底部結合地圖和注入方法,以使代碼更高效。任何投入將不勝感激。Fibonacci序列的整數紅寶石求和

def fib(n) 
     return 1 if n <= 2 

     fib_index = 3 
     a, b = 1, 1 

     while fib_index <= n 
     c = a + b 
     a = b 
     b = c 
     fib_index += 1 
     end 
    c 
    end 

p (1..10).map {|i| fib(i)} 
p (1..10).inject {|sum, i| sum + fib(i)} 

我也有興趣在使用遞歸的方法:

def fibonacci(n) 
    return n if n <= 1 
    fibonacci(n - 1) + fibonacci(n - 2) 
    end 
    p (1..10).map {|i| fibonacci(i)} 
    p (1..10).inject {|sum, i| sum + fibonacci(i)} 
+0

我看到在顯示你的遞歸替代沒有目的。問題不在於計算順序,而是在於總結它們的價值。 –

回答

1
puts "Total: %i" % 
    ((1..10).inject(0) do |t,i| 
    f = fib(i) 
    puts "%s: %s" % [i.to_s.rjust(2), f.to_s.rjust(3)] 
    t + f 
    end) 
1: 1 
2: 1 
3: 2 
4: 3 
5: 5 
6: 8 
7: 13 
8: 21 
9: 34 
10: 55 
Total: 143 
+0

我相信預期的產出應該是'143'。 –

+1

謝謝,@ sagarpandya82。修復。 –

+0

這確實產生了總和。然而,我正在試圖打印斐波納契前十個整數的序列,以及前十個整數的總和。所以:'0 1 1 2 3 5 8 13 21 34 143'(143是總和)。 –