2013-11-26 106 views
1

請問有人可以解釋這個遞歸函數是怎麼做的?我正在努力瞭解如何通過使用+遞歸函數乘以

 static int Multiply(int x, int y) 
     { 
      if (y == 1) 
      { 
       return x; 
      } 
      else 
      { 
       return x + Multiply(x, y - 1); 
      } 
     } 
+0

乘法只是多次增加一個值 - 例如, 4 x 5 = 5 + 5 + 5 + 5。這正是代碼所做的事情,每次遞減'y'值('y'表示添加相同值的次數)並將值'x '每次 – Charleh

+0

這隻適用於正的非零整數。你可能想檢查'y'的符號(或者使用'unsigned int'來強制它)。 – Floris

+1

當你掙扎時 - 拿起一張紙並嘗試手動逐行執行每一行。 – zerkms

回答

0

簡單。對於例如

5 + 5 + 5 = 5 x 3 

我們可以簡單地把這個作爲Multiply(5, 3)

8

記住你的基本的算術。

X * 2 = X + X 
X * 3 = X + X + X 

所以我可以factorise X * 3作爲

X * 3 = X + (X * 2) 

所以在功能您有:

X * Y = X + (X * (Y-1)) 

因此

X * Y = Multiply(X, Y) = (X + Multiply(X, Y -1)) 

這實質上是遞歸。

0

,它是:

x + y(count)-1. 

x+(x + (y count-1)) 

實施例:

if x=3 y=4 

x+((y-1)) 

3+(3)=> iteration1 
3+(3+3) => iteration 2 
3+(3+3+3) => iteration 3 



Final => 3+(3+3+3) 
Result => 12 
2

爲了利用實施例解釋...

Multiply(5, 4) will call 
Multiply(5, 3) will call 
Multiply(5, 2) will call 
Multiply(5, 1) 

對於每個呼叫,它將累積加5等

5 + 5 + 5 + 5 = 20 

祝你好運!

0

給定堆棧限制,遞歸不是這種需求的方式。另外,用(1,0)來評估你的函數,觀察y小於1的情況。

這裏有一種使用加法的「乘法」方法,只需藉助增量即可得到+/- 1加法:

static int Multiply(int x, int y) 
    { 
     int result = 0; 

     while (y > 0) 
     { 
      result += x; 
      y--; 
     } 

     while (y < 0) 
     { 
      result -= x; 
      y++; 
     } 

     return result; 
    } 
0

該方法不正確,因爲它在您嘗試乘以零時崩潰。

我寫了一個正確的方法。

public static int Product(int a, int b) 
    { 
     if (a == 0 || b == 0) return 0; 
     else return a + Product(a,b - 1); 
    }