a、b兩個值交換位置(不引入第三方變量)及其應用

a、b兩個值交換位置(不引入第三方變量)及其應用 編程

  1. 概念
  2. 解決方法
  3. 應用

1 概念 函數

    在編程中,爲了交換兩個變量的值,咱們習慣於引入臨時變量,幫助兩個變量值交換。例如a=1,b=2;要交換這兩個值,咱們習慣於引入temp臨時變量。temp=a,a=b,b=temp,這樣就實現a和b的兩個變量值的交換。而如今咱們的目的是不向內存空間申請temp變量空間,來時實現a,b兩個值的交換。 spa

2 解決方法 內存

    解決方法有兩種:算術(+/-)和異或兩種方式。異或(^)有能夠從異或地址和異或值來考慮。 變量

2.1 算術(+、-)解決方案 程序

  •     int a=1,b=4;
  •     a=b-a; …………………………a=3
  •     b=b-a;………………………… b=1
  •     a=a+b;…………………………a=4

    上述代碼是用算術的過程來實現a與b的值的交換。這裏主要的方法是考慮中間量|a-b|和留下一個原值。不過要使程序正確,還要作一些值的大小判斷。寫成函數的話會比較麻煩,通用性問題。 方法

2.2 異或(^)解決方案 解決方案

  •     a=a^b;…………………………異或的運算規則是同取0,異取1
  •     b=a^b;
  •     b=a^b;

    這裏交換的方法也是依賴於公式A^B^A=B和A^B^B=A這個規律。可是函數參數的傳遞分爲兩種值傳遞和地址傳遞。故交換也有兩種,值交換和變量所指向值的地址交換。 co

2.3 算術和異或的區別 習慣

    儘管粗看起來,2.1中解決的方式和2.2中的解決方式同樣,可是會存在一個問題:越界。例如a,b爲int,可是a+b是否爲知足小於int的最大值,這是一個值得考慮的問題。而2.2的解決方案中,不存在這個問題。

3 應用

    這種值交換的目的是爲了減小臨時變量的申請,減小程序所需的內存空間。對大量申請臨時變量來實現交換的程序是一種很好的解決方案。

    具體的例子有求斐波那契的值

相關文章
相關標籤/搜索