2016-07-23 4 views
4

私はEuclid's Algorithmを最大の共通因子を見つけるために理解しようとしており、このコードでは問題があります。特に多変数割り当てです。複数の変数の割り当てが同時に行われていますか?

def greatest_common_factor(u, v) 
    u, v = u.abs, v.abs 
    puts(u % v) 
    while v > 0 
    u, v = v, u % v 
    end 
    u 
end 

私はV、その後、「U」の最初に割り当てられると仮定が、より明示的に書くことは、アルゴリズムを破りました。

u = v 
v = u % v 
+0

'u'の初期値:' t = u'、 'u = v'、' v = t%v'を保存するには一時変数が必要です。 – Stefan

答えて

1

あなたはこの書くとき:

u = v 
    v = v % v # u == v, this will make v to be 0, so break it down 

そして、私は、複数の変数割り当ての質問に答えるためにしようとします:

u = v 
    v = u % v 

を、私はそれだけでこのようなものだと思います。

a = 1 
    b = 2 
    a, b = 3, a # after this, a == 3, b == 1 

あなたはそれを見ることができる、それはあなたが最初[3, a]の部分を評価し、ちょうどa, b = [3, a]ようなものだ:これは私のテストコードです。そして、ここでRipperを分析しています:

[:program, 
    [[:massign, 
     [[:@ident, "a", [1, 0]], [:@ident, "b", [1, 2]]], 
     [:mrhs_new_from_args, 
     [[:@int, "3", [1, 4]]], 
     [:var_ref, [:@ident, "a", [1, 6]]]]]]] 

あなたは、私が上記の言ったように:mrhs_new_from_argsが最初に評価されていることがわかります。

関連する問題