递归函数相乘

时间:2013-11-26 01:23:53

标签: c# recursion multiplication

有人可以解释一下这个递归函数是怎么做的吗?我很难理解如何使用+

来增加数字
        static int Multiply(int x, int y)
        {
            if (y == 1)
            {
                return x;
            }
            else
            {
              return x + Multiply(x, y - 1);
            }
        }

6 个答案:

答案 0 :(得分:8)

记住你的基本算术。

X * 2 = X + X
X * 3 = X + X + X

所以我可以将X * 3分解为

X * 3 = X + (X * 2)

所以在你的功能中:

X * Y = X + (X * (Y-1))

因此

X * Y = Multiply(X, Y) =  (X + Multiply(X, Y -1))

这主要是递归。

答案 1 :(得分:2)

用例子说明......

Multiply(5, 4) will call 
Multiply(5, 3) will call 
Multiply(5, 2) will call 
Multiply(5, 1)

对于每次通话,它会累计添加5个

5 + 5 + 5 + 5 = 20

祝你好运!

答案 2 :(得分:0)

简单。例如,

5 + 5 + 5 = 5 x 3

我们可以简单地将其设为Multiply(5, 3)

答案 3 :(得分:0)

它是:

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

答案 4 :(得分:0)

在给定堆栈限制的情况下,递归不是满足此要求的方法。另外,用(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;
    }

答案 5 :(得分:0)

该方法不正确,因为当您尝试乘以零时它会崩溃。

我写了一个正确的方法。

    public static int Product(int a, int b)
    {
        if (a == 0 || b == 0) return 0;
        else return a + Product(a,b - 1);
    }