2013-11-26 62 views
1

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

 static int Multiply(int x, int y) 
     { 
      if (y == 1) 
      { 
       return x; 
      } 
      else 
      { 
       return x + Multiply(x, y - 1); 
      } 
     } 
+0

乘法只是多次增加一个值 - 例如, 4 x 5 = 5 + 5 + 5 + 5。这正是代码所做的事情,每次递减'y'值('y'表示添加相同值的次数)并将值'x '每次 – Charleh

+0

这只适用于正的非零整数。你可能想检查'y'的符号(或者使用'unsigned int'来强制它)。 – Floris

+1

当你挣扎时 - 拿起一张纸并尝试手动逐行执行每一行。 – zerkms

回答

0

简单。对于例如

5 + 5 + 5 = 5 x 3 

我们可以简单地把这个作为Multiply(5, 3)

8

记住你的基本的算术。

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)) 

这实质上是递归。

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 
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 

祝你好运!

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; 
    } 
0

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

我写了一个正确的方法。

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