我试图理解Euclid的算法,找出最大的公约数,并且我对这段代码有困难,特别是多变量赋值。
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
我认为'u'将首先被分配,然后是v,但是更明确地写它会破坏算法。
u = v
v = u % v
答案 0 :(得分:1)
当你这样写:
u = v
v = u % v
我认为它只是这样:
u = v
v = v % v # u == v, this will make v to be 0, so break it down
我将尝试回答多变量赋值问题。这是我的测试代码:
a = 1
b = 2
a, b = 3, a # after this, a == 3, b == 1
您可以看到,它就像a, b = [3, a]
一样,您将首先评估[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
将首先进行评估。