2016-07-05 8 views
0

Я искал Stack Overflow и не нашел свой вопрос, поэтому считаю, что это будет безопасно публиковать. Я работаю над стандартной частью кода, которая печатает первые 10 целых чисел последовательности Фибоначчи, а затем добавляет эти первые 10 целых чисел вместе и печатает сумму. Код, который я написал, по существу работает, но я пытаюсь объединить карту и внедрить методы внизу, чтобы сделать код более эффективным. Любой вход был бы весьма признателен.Ruby Сумма целых чисел для последовательности Фибоначчи

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 - сумма). –