2016-07-05 9 views
0

Ich habe Stack Overflow gesucht und habe meine Frage nicht gefunden, also denke ich, dass dies sicher zu posten ist. Ich arbeite an einem Standardcode, der die ersten 10 Ganzzahlen der Fibonacci-Folge ausgibt und dann die ersten 10 Ganzzahlen addiert und die Summe ausgibt. Der Code, den ich geschrieben habe, funktioniert im Wesentlichen, aber ich versuche, die Map- und Inject-Methoden unten zu kombinieren, um den Code effizienter zu machen. Jede Eingabe würde sehr geschätzt werden.Ruby Summe der Ganzzahlen für Fibonacci Sequenz

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)} 

Ich bin auch in einem Verfahren interessiert, die Rekursion verwendet:

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

Ich sehe Ihre rekursive Alternative keinen Zweck zu zeigen. Die Frage ist nicht die Berechnung der Sequenz, es geht darum, ihre Werte zu summieren. –

Antwort

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

Erwartete Ausgabe sollte "143" sein, glaube ich. –

+1

Danke, @ sagarpandya82. Behoben. –

+0

Das ergibt tatsächlich die Summe. Ich versuche jedoch, die Folge der ersten zehn ganzen Zahlen von Fibonacci sowie die Summe der ersten zehn ganzen Zahlen zu drucken. Also: '0 1 1 2 3 5 8 13 21 34 143' (143 ist die Summe). –