尾递归方法到多个2个数

时间:2009-07-19 03:11:30

标签: recursion

将多个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);

        } 

2 个答案:

答案 0 :(得分:1)

仅使用加法,减法和加倍的乘法方法称为Ancient Egyptian Multiplication。这种方法比你提出的方法更有效,并且可以表示为尾递归实现。

答案 1 :(得分:0)

您可以通过将零检查移动到Multiply2来改进它,因此只检查一次。

或者您可以使用您的语言的内置乘法运算:P

看起来你会为y的负值打一个无限循环,所以如果y是负数而x是正数,你可以交换符号;如果他们都是消极的,那么他们都是积极的。