请问有人可以解释这个递归函数是怎么做的?我正在努力了解如何通过使用+递归函数乘以
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