2015-05-21 6 views
1
def fib_up_to(max) 

    i1, i2 = 2, 1 

    while i1 <= max 
    yield i1 
    i1 ,i2 = i2, i1 + i2 
    end 
end 

fib_up_to(10) { |f| print f, " "} 

Это распечатывает - 2 1 3 4 7Рубин массив вопросов

, но когда я изменить его на

def fib_up_to(max) 

    i1, i2 = 2, 1 

    while i1 <= max 
    yield i1 
    i1 = i2 
    i2 = i1 + i2 
    end 
end 

fib_up_to(10) { |f| print f, " "} 

Это дает мне 2 4 2 4 8

Я запутался, как это любая другая

ответ

0

Первое задание не изменяет значения, чтобы повлиять на второе назначение с этим утверждением i1, i2 = i2, I1 + I2

второй способ, как показано ниже

irb(main):012:0> i1, i2 = 2,1 
=> [2, 1] 
irb(main):015:0> i1 ,i2 = i2, i1+i2 
=> [1, 3] 
irb(main):016:0> i1 
=> 1 
irb(main):017:0> i2 
=> 3 


irb(main):023:0> i1, i2 = 2,1 
=> [2, 1] 
irb(main):024:0>  i1 = i2 
=> 1 
irb(main):025:0>  i2 = i1+i2 
=> 2 
irb(main):026:0> i1 
=> 1 
irb(main):027:0> i2 
=> 2 
0

Nvm Я нашел ответ. Для тех, кто заинтересован это выглядит следующим образом: Первый метод

I1 I2

2 1 # Первый ряд

1 3 # I2 = I1 + I2 (оба из 1-й строки)

Второй метод:

I1 I2

1 2 #because I2 = I1 (вторая строка) + I2 (первая строка)