a、b兩個值交換位置(不引入第三方變量)及其應用 編程
1 概念 函數
在編程中,爲了交換兩個變量的值,咱們習慣於引入臨時變量,幫助兩個變量值交換。例如a=1,b=2;要交換這兩個值,咱們習慣於引入temp臨時變量。temp=a,a=b,b=temp,這樣就實現a和b的兩個變量值的交換。而如今咱們的目的是不向內存空間申請temp變量空間,來時實現a,b兩個值的交換。 spa
2 解決方法 內存
解決方法有兩種:算術(+/-)和異或兩種方式。異或(^)有能夠從異或地址和異或值來考慮。 變量
2.1 算術(+、-)解決方案 程序
上述代碼是用算術的過程來實現a與b的值的交換。這裏主要的方法是考慮中間量|a-b|和留下一個原值。不過要使程序正確,還要作一些值的大小判斷。寫成函數的話會比較麻煩,通用性問題。 方法
2.2 異或(^)解決方案 解決方案
這裏交換的方法也是依賴於公式A^B^A=B和A^B^B=A這個規律。可是函數參數的傳遞分爲兩種值傳遞和地址傳遞。故交換也有兩種,值交換和變量所指向值的地址交換。 co
2.3 算術和異或的區別 習慣
儘管粗看起來,2.1中解決的方式和2.2中的解決方式同樣,可是會存在一個問題:越界。例如a,b爲int,可是a+b是否爲知足小於int的最大值,這是一個值得考慮的問題。而2.2的解決方案中,不存在這個問題。
3 應用
這種值交換的目的是爲了減小臨時變量的申請,減小程序所需的內存空間。對大量申請臨時變量來實現交換的程序是一種很好的解決方案。
具體的例子有求斐波那契的值