使用递归java的两个数字的乘积

时间:2016-10-23 21:52:50

标签: java

我对此计划感到很困惑:

public static int product(int n1, int n2) {

    if (n2== 0 || n1==0) {
       return 0;
    }
      n1 += product(n1, n2 - 1);
     return n1;
}

假设我制作了产品(3,2),那么必须函数返回:

Sence 3> 0和2> 0然后n1 = 3+产品(3,1)

Sence 3> 0和1> 0然后n1 = 3+ 3+产品(3,1)

3> 0但0 == 0然后返回0; 但它返回6。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

你对该方法如何工作的解释是正确的,但请记住,因为这是递归的,它最终会返回所有返回的总和。让我解释: 第一次递归返回3 +乘积(3,1)。 但是,您的程序还不知道产品(3,1)是什么,因此必须在返回之前继续。 第二次递归(乘积(3,1))返回3 +乘积(3,0)。 同样,您的程序必须继续递归才能找到产品(3,0)。 正如你所说,第三次也是最后一次递归返回0,但是FINAL的回答可以追溯到第一次递归的回答,3 +产品(3,1)。 我们知道产品(3,1)= 3 +产品(3,0),产品(3,0)= 0。 所以产品(3,2)= 3 + 3 + 0,这是6.在你的答案中你似乎只希望得到一个答案的最终递归,但由于你的return语句,它是一个组合的3。