将多个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 :(得分:1)
仅使用加法,减法和加倍的乘法方法称为Ancient Egyptian Multiplication。这种方法比你提出的方法更有效,并且可以表示为尾递归实现。
答案 1 :(得分:0)
您可以通过将零检查移动到Multiply2来改进它,因此只检查一次。
或者您可以使用您的语言的内置乘法运算:P
看起来你会为y的负值打一个无限循环,所以如果y是负数而x是正数,你可以交换符号;如果他们都是消极的,那么他们都是积极的。