我正在编写一个返回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)
关于我可以搞砸的任何提示?
答案 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)
}