0

补充资料:

芯片不支持乘法,只支持加法。我应该通过创建一个递归方法 mult() 来解决这个问题,该方法通过将 x 与自身相加 y 次来执行 x 和 y 的乘法。它的参数是 x 和 y,它的返回值是 x 和 y 的乘积。然后我应该编写方法和 main() 来调用它。

这是纯粹的逻辑思维,但每次我试图思考该怎么做时,我都会迷失方向。

我被困在数学部分..我所拥有的,那行不通,我知道数学是错误的,但我不擅长这个:

public static void mult(int x, int y) {
    x = 0;
    y = 0;
    if (y > 0) {
        for (int i = 0; i < y; i++) {
            x = x * (x * y);
            return mult(x, y);
        }
    }
}
4

6 回答 6

10

当我听到“递归”时,我希望看到两件事:

  1. 每次都使用修改后的参数调用自身的函数。
  2. 顶部的停止条件告诉函数何时停止,避免无限堆栈。

那么你的呢?在编写代码之前先用文字写下来。

于 2013-09-28T12:40:03.857 回答
3

One possibility is to use an accumulator which will store the current value of the multiplication. I replace missing statements by ??? :

public static void main(String []args){
        System.out.println(mult(2,5));
 }
    public static int mult(int x, int y) {
      if(???) return ???;
      else return multAcc(???,???,???);
    }

    private static int multAcc(int x, int y, int acc){
        if(???) return ???;
        else return multAcc(???, ???, ???);
    }
于 2013-09-28T12:44:14.083 回答
2

Java has no TCO by design, so using recursion for linear (not tree-like) processes is very bad idea. Especially for such task, which will most likely become a bottleneck in your program. Use loop instead.

Oh, it must be recursive anyway? Looks like a homework task. Do it yourself then.

于 2013-09-28T12:43:50.867 回答
2

...通过将 x 添加到自身 y 次。

你实际上可以这样做,而不是相乘。哦,也许如果您不将 x 和 y 都设置为零,您将需要添加一些内容;-)

最后一件事:如果您想要递归解决方案,则不需要 for 循环。

于 2013-09-28T12:40:16.623 回答
2

您需要记住的是,乘法是重复的加法(假设两个操作数都是>= 0),所以我们有:

  • 基本情况是什么时候y为零
  • 如果y不为零,则再加x一次,然后1减去y

请注意,只要y是正数,它最终的值就会为零。所以基本上我们一直在增加xy次数;这就是我的意思:

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

相同的代码也可以用尾递归风格编写 - 意思是:递归调用返回后无事可做,这对于某些支持所谓的尾调用优化的语言很重要:

public static int mult(int x, int y, int accumulator) {
    if (y == 0)
        return accumulator;
    return mult(x, y-1, x + accumulator);
}

上面将按如下方式调用,注意最后一个参数始终初始化为零:

mult(10, 5, 0)
=> 50
于 2013-09-28T12:40:58.910 回答
1
public static int mult(int x, int y) {
        if (y == 0) {
            return 0;
        }
        if (y > 0) {
            return x + mult(x, y - 1);
        } else {
            return -x + mult(x, y + 1);
        }
    }

顺便说一句,这是解决方案

于 2013-10-25T09:58:38.340 回答