2009-07-19 77 views
2

尾遞歸方法多2號尾遞歸方法多2號

public static int Multiply2(int x, int y) 
{ 
    return MulTail(x, y, x); 
} 

public static int MulTail(int x, int y, int result) 
{ 
    if (y == 0 || x == 0) 
     return 0; 
    if (y == 1) 
     return result; 

    return MulTail(x, y - 1, result+x); 

} 

改變,以適應負數

public static int Multiply2(int x, int y) 
     { 
      if ((y < 0 && x > 0) || (x < 0 && y < 0)) 
      { 
       y = y - y - y; 
       x = x - x - x; 
      } 


      return MulTail(x, y, x); 
     } 

     public static int MulTail(int x, int y, int result) 
     { 
      if (y == 0 || x == 0) 
       return 0; 
      if (y == 1) 
       return result; 

      return MulTail(x, y - 1, result+x); 

     } 
+0

我們可以改進嗎? – Learner 2009-07-19 03:11:41

+1

爲什麼任何人在正確的思想中都會使用遞歸來乘以兩個數字? – 2009-07-19 03:15:49

回答

0

你可以通過移動提高它的實現零檢查到Multiply2 ,所以只能檢查一次。

或者你可以只用你的語言的內置乘法運算:P

它也像你會打y的負值一個無限循環,所以如果y爲負,x爲正,你可以交換標誌;如果它們都是負面的,那麼它們都是正面的。

1

僅使用加法,減法和加倍的乘法方法稱爲Ancient Egyptian Multiplication。這種方法比您提出的方法更高效,並且可以將其制定爲尾遞歸實現。