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
答案 0 :(得分:2)
尝试考虑i1
和i2
中存储的数字,以及每一步中发生的情况。在每一步中,i2
的值都会被覆盖到i1
,并且i2
中存储的值会增加i1
中存储的值。在每一步中,您都会返回i1
中存储的值。
您从1, 1
开始(并返回1),然后获得1, 2
(并返回1),然后获得2, 3
(并返回2),然后获得{{ 1}}(并返回3)依此类推。