請問有人可以解釋這個遞歸函數是怎麼做的?我正在努力瞭解如何通過使用+遞歸函數乘以
static int Multiply(int x, int y)
{
if (y == 1)
{
return x;
}
else
{
return x + Multiply(x, y - 1);
}
}
請問有人可以解釋這個遞歸函數是怎麼做的?我正在努力瞭解如何通過使用+遞歸函數乘以
static int Multiply(int x, int y)
{
if (y == 1)
{
return x;
}
else
{
return x + Multiply(x, y - 1);
}
}
簡單。對於例如
5 + 5 + 5 = 5 x 3
我們可以簡單地把這個作爲Multiply(5, 3)
記住你的基本的算術。
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))
這實質上是遞歸。
,它是:
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
爲了利用實施例解釋...
Multiply(5, 4) will call
Multiply(5, 3) will call
Multiply(5, 2) will call
Multiply(5, 1)
對於每個呼叫,它將累積加5等
5 + 5 + 5 + 5 = 20
祝你好運!
給定堆棧限制,遞歸不是這種需求的方式。另外,用(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;
}
該方法不正確,因爲它在您嘗試乘以零時崩潰。
我寫了一個正確的方法。
public static int Product(int a, int b)
{
if (a == 0 || b == 0) return 0;
else return a + Product(a,b - 1);
}
乘法只是多次增加一個值 - 例如, 4 x 5 = 5 + 5 + 5 + 5。這正是代碼所做的事情,每次遞減'y'值('y'表示添加相同值的次數)並將值'x '每次 – Charleh
這隻適用於正的非零整數。你可能想檢查'y'的符號(或者使用'unsigned int'來強制它)。 – Floris
當你掙扎時 - 拿起一張紙並嘗試手動逐行執行每一行。 – zerkms