2016-07-05 2 views
0

Stack Overflowを検索したところ、私の質問は見つかりませんでしたので、投稿するのが安全だと思います。私はフィボナッチシーケンスの最初の10個の整数を出力し、最初の10個の整数を合計して合計を出力する標準的なコードに取り組んでいます。私が書いたコードは本質的には機能しますが、コードを効率的にするために、地図を結合してメソッドを底に注入しようとしています。どんな入力も非常に高く評価されます。Ruby Integer for Fibonacci Sequence

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

それは実際に合計を生み出します。しかし、フィボナッチの最初の10個の整数のシーケンスと、最初の10個の整数の和を出力しようとしています。したがって: '0 1 1 2 3 5 8 13 21 34 143'(143は合計です)。 –