2016-12-04 58 views
1

我已經寫了這段代碼對我來說很有意義,但不管怎樣,它似乎都不起作用。這是我有:Ruby打印Fibonacci序列(迭代)

def fib(places) 

    a = 0 
    b = 1 

    while a < places do 
      puts a + "\n" 
      a = b 
      b = a + b 
    end 
end 

puts fib(1000) 
+1

通知你不需要這種'把一個+「\ n」',「事業卻將已經打印給定的值後改變線路。如果您正在使用'print a',那麼您需要強制更改行。 –

+1

當詢問你寫的哪些代碼不能正常工作時,有必要詳細描述什麼不起作用(即引用任何錯誤,描述錯誤的行爲......),並將其與你期望的代碼進行比較確實。請查看[如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve),以獲取有關如何提出一個很好的問題的指導,這些問題將幫助您解決問題問題,並免除浪費時間猜測可能存在的問題。 'fib'中的 –

回答

2
def fib(num) 
    i, j = 0, 1 
    while i <= num 
    puts i 
    i, j = j, i + j 
    end 
end 

或者

def fibonacci(n) 
    return n if (0..1).include? n 
    (fibonacci(n - 1) + fibonacci(n - 2)) 
end 
puts fibonacci(5) 
# => 5 

這可能有助於

def fibonacci(n) 
    return n if n <= 1 
    fibonacci(n - 1) + fibonacci(n - 2) 
end 
puts fibonacci(10) 
# => 55 
+0

:無給定的塊(yield)(LocalJumpError) – steenslag

+0

ahh好的我修復了它 – user126885

2

我假設你的地方PARM用於放置在一個極限顯示最大斐波那契數值。

我得到了良好的結果:

def fib(places) 

    a = 0 
    b = 1 

    while b < places do 
    puts b 

    a,b = b,a+b 
    end 
end 

fib(1000) 

墓內:

1 
1 
2 
3 
5 
8 
13 
21 
34 
55 
89 
144 
233 
377 
610 
987 
1

2個問題:

  • a + "\n"a是一個數字,"\n"是一個字符串。您無法先添加它們,而無需先轉換。 1 + "2"應該是12還是3?你需要爲Ruby明確。使用puts "#{a}\n"或者只是puts a
  • a = b其次b = a + b基本上只是b = 2*b,這是不是你想要的。