假設須要交換的兩個數爲 a, b
code
------------- | a | b | t | -------------
使用一箇中間變量來作媒介來交換,設中間變量爲t;則經過 a -> t; b -> a; t -> b
完成了交換,代碼以下內存
var t = a; a = b; b = t;
a = a + b; b = a - b; a = a - b;
初看起來可能比較迷糊,下面分析一下,假設內存結構以下class
a1 a2 --------- | a | b | ---------
先把兩個的和保存進a所在的位置 a + b -> a1
,狀態改變以下變量
a1 a2 ------------- | a + b | b | -------------
如今a1位置已經爲a+b
了,減去一個b
便變成了a
,而後放在a2位置,如今狀態以下co
a1 a2 ------------- | a + b | a | -------------
最後用a1所在位置的數減去a2所在位置的數也即 a + b - a = b
,放進a1,完成交換
a1 a2 --------- | b | a | ---------
其實就是把兩數先累加放在其中一個位置,再用這個位置的數減去兩次另外一個位置的數