由於乘法是簡單的重複加法,如果y
是成對,則可以將它除以2,然後將x
乘以2。 (所以,2 * 2 = 2 + 2.2 * 3 = 2 + 2 + 2,2 * 4 = 2 + 2 + 2 + 2 ....)
如果y
是奇數,則可以減1得到一對y
,你需要添加一個x
(基本上是1 * y)。
這裏有一個細目:
RecMultiply(5,5) :
+- z = RecMultiply(5,2)
| return 5 + 2 * z (=20 +5 =25)
|
|
+-- RecMultiply(5,2) :
+- z = RecMultiply(5,1)
| return 2 * z (=10)
|
+-- RecMultiply(5,1) :
+- z = RecMultiply(5,0)
| return 5 + 0
|
+---RecMultiply(5,0) :
return 0
RecMultiply(5,4) :
+- z = RecMultiply(5,2)
| return 2 * z (=)
|
+-- RecMultiply(5,2) :
+- z = RecMultiply(5,1)
| return 2 * z (=10)
|
+-- RecMultiply(5,1) :
+- z = RecMultiply(5,0)
| return 5 + 0
|
+---RecMultiply(5,0) :
return 0
所以,基本上,遞歸位後(即通吃對乘法護理),你可能需要添加另一個y
,其在上述第一種情況,是第一次通話爲5
)。
請注意y=1
的特殊情況,意思是x*1
,在我們的例子中顯然是5
。同樣的邏輯適用。
你可能想看看它這個樣子,如果它可以幫助:
static int RecMultiply(int x, int y)
{
switch (y)
{
case 0:
return 0;
break;
case 1:
return x;
break;
default:
return (y%2 ==0) ? RecMultiply(x, y/2)
: x + RecMultiply(x, y/2);
break;
}
}
我認爲這表示在更容易理解的方式+1(或奇數的情況下)。
我很抱歉。我已經更新了答案。這是X不是Z。 –
我想我的下一個問題是x,y和z代表書本中與列和運行總數的關係? – reggaeguitar
除非您需要關注本書,否則我會說忘記。嘗試理解邏輯。 X和y是我們需要計算的產品的兩個數字。 Z是過程中使用的臨時值。 –