我的第一个红宝石应用程序 - 斐波那契序列

时间:2012-09-20 00:09:34

标签: ruby

我正在编写一个返回Fibonacci序列中第n个元素的方法,但遇到了意外的结束错误。

def fib_seq(n)

  a = [0]

  n.times do |i|
    if i==0
      a[i] = 0
    else if i==1
      a[i] = 1
    else
      a[i] = a[i-1] + a[i-2]
    end  
  end

  return a[n]
end

puts fib_seq(4)

关于我可以搞砸的任何提示?

3 个答案:

答案 0 :(得分:4)

假设你试图返回第n个(而不是第(n-1)个,即fib(1)= 0 NOT fib(0)= 0)。

我修改了它:

else if i==1

elsif i==1

(AND)

return a[n]

return a[n - 1]

所以你的最终代码应该是这样的:

def fibSeq(n)

  a = [0]

  n.times do |i|
    if i==0
      a[i] = 0
    elsif i==1
      a[i] = 1
    else
      a[i] = a[i-1] + a[i-2]
    end  
  end

  return a[n-1]
end

puts fibSeq(4)

根据您的评论,以下代码将起作用:

def fibSeq(n)

  a = [0]

  (n+1).times do |i|
    if i==0
      a[i] = 0
    elsif i==1
      a[i] = 1
    else
      a[i] = a[i-1] + a[i-2]
    end  
  end

  return a[n]
end

puts fibSeq(4)

如果要将fibs输出为列表,请使用:

return a[0..n]

而不是

return a[n]

答案 1 :(得分:2)

非常优化的代码

版本1

def fib(n, cache)
  return 1 if n <= 2
  return cache[n] if cache[n]
  cache[n] = fib(n - 1, cache) + fib(n - 2, cache)
end

cache = {}
puts fib(5,cache)

第2版

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

puts fib(100)

答案 2 :(得分:1)

如果你去递归,这就是伪代码:

fib(n) {
    if n = 0 -> return 0
    else if n = 1 -> return 1
    else -> return fib(n-1) + fib (n-2)
}