斐波那契序列:可以理解代码

时间:2015-01-10 18:21:14

标签: ruby yield

Fibonacci序列是1,1,2,3,5,8 ......前两个元素是1.每个连续元素是前两个元素的总和。

我在理解下面的代码时遇到了问题。我了解i1, i2 = i2, i1+i2会返回1, 1, 2, ...,但是如何返回..., 3, 5, 8, ...?指定了i1, i2 = 1, 1;这个3来自哪里?如果我理解这一点,我想我会理解为什么它变成5, 8, ...

def fib_to(max)
  i1,i2 = 1,1
  while i1 <= max
    yield i1
    i1, i2 = i2, i1+i2
  end
end

fib_to(100) do |f| 
  #yeild(i1) is replaced by this |f|?
  puts f
end

结果

1
1
2
3
5
8
13
21
34
55
89

1 个答案:

答案 0 :(得分:2)

尝试考虑i1i2中存储的数字,以及每一步中发生的情况。在每一步中,i2的值都会被覆盖到i1,并且i2中存储的值会增加i1中存储的值。在每一步中,您都会返回i1中存储的值。

您从1, 1开始(并返回1),然后获得1, 2(并返回1),然后获得2, 3(并返回2),然后获得{{ 1}}(并返回3)依此类推。