我遇到了一个 ruby 方法,它是一个迭代斐波那契序列。(不是递归)代码中有一行我以前从未见过,而且我不太确定它在做什么。方法如下:
方法:
def practice(n)
return 0 if n == 0
num1 = 2
num2 = 1
n.times do
num1, num2 = num2, (num1 + num2)
end
num1
end
如果有人能够重复这一点并解释正在发生的事情,我将永远感激不已。但是,主要是我不理解这部分代码 -
n.times do
num1, num2 = num2, (num1 + num2)
end
num1, num2 = num2
的作用/含义是什么??
最佳答案
代码行num1, num2 = num2, (num1 + num2)
一次分配两个变量。 num1
获取 num2
的旧值,而 num2
获取新值 (num1 + num2)
。
在一行代码上进行多个赋值允许您执行这两种操作,而无需使用临时变量。例如,这将不起作用:
num1 = num2
num2 = (num1 + num2)
因为 num1
在加法步骤之前已被新值覆盖,因此 num2
将被分配错误的值。一行版本相当于:
temp = (num1 + num2)
num1 = num2
num2 = temp
仅供引用,这称为 parallel assignment或者有时多重分配。
关于ruby - 了解 ruby 代码(斐波那契),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934819/