2016-07-05 1 views
0

Stack Overflow를 검색 한 결과 내 질문을 찾지 못해 게시하는 것이 안전하다고 생각합니다. 필자는 피보나치 시퀀스의 처음 10 개의 정수를 출력하고 그 처음 10 개의 정수를 더하고 합계를 인쇄하는 표준 코드 조각을 만들고 있습니다. 필자가 작성한 코드는 본질적으로 작동하지만 코드를 더욱 효율적으로 만들 수 있도록지도를 결합하여 맨 아래에 메소드를 삽입하려고합니다. 모든 입력은 크게 감사하겠습니다.Ruby Integer for 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

실제로 그 합을 산출합니다. 그러나 저는 피보나치의 처음 10 개의 정수의 순서와 처음 10 개의 정수의 합계를 인쇄하려고합니다. 그래서 :'0 1 1 2 3 5 8 13 21 34 143' (143은 합계 임). –