2014-03-29 30 views
0

我想写一个赛普尔脚本,计算斐波那契数在一个循环:红宝石。范围:每一个变化值

def fib(v) 
return v if v < 2 
(fib(v-2) + fib(v-1)) 
end 

[0..15].each do |i| 
    puts "#{fib(i-1)} " 
end 

但这个代码失败,因为I-1不能被执行,因为我有类型范围内。我该怎么处理它?我知道,还有很多其他方法可以计算斐波纳契数字,但我需要这些代码才能工作,而不是重写它。

+0

按照@Peereboom的建议,使用范围作为接收者是有意义的,但是如果你想创建一个包含范围值的数组,你需要将范围转换为数组:'a = *(1..15)'或'a =(1..15).to_a','=> [1,2,3,...,15]'。 –

回答

4

问题:[]是创建数组的语法。所以[0..15]用一个元素创建一个数组。那一个元素是Range,0..15。范围本身就是一个枚举的,所以您可以:

(0..15).each do |i| 
    puts fibonacci(i - 1) 
end 
  • 作为一个侧面说明,使用插值字符串不必要的,当你有仅1元打印。