使用递归获取2个数字的乘积和商而不使用*和/运算符

时间:2012-02-25 09:54:35

标签: java recursion

我正在努力学习编程,我正处于学习递归的阶段。在此之前,我已成功解决问题,但使用循环。现在,因为递归对我来说非常有趣,我想知道是否可以将循环转换为递归方法。我做了我的尝试,但我已经得到了一种无限的计算。

有人可以帮我一把吗?感谢。

这是我的代码。

public class RecursiveProduct {


public static void main (String[] args) {

    Scanner myInput = new Scanner(System.in);

    System.out.print("Enter num1: ");
    int num1 = myInput.nextInt();

    System.out.print("Enter num2: ");
    int num2 = myInput.nextInt();

    int product = recursiveProduct(num1, num2);

    System.out.print(num1 +" * " +num2 +" = " +product);


}

public static int recursiveProduct(int a, int b)
{
    int result = 0;

    if(b == 0)
        return result;
    else
    {
        result += a;
        return result += recursiveProduct(a, b--);
    }
}


}

4 个答案:

答案 0 :(得分:1)

首先,这是C ++代码,但稍后我会解释Java代码:

int function(int a, int b, int &counter,int &result){
    if(b==0 || a==0)
        return 0;
    if(counter==b)
        return 1;
    else{
        result+=a;
        counter++;
        function(a,b,counter,result);
    }
}

函数需要两个引用int &counterint result。不幸的是,你不能通过Java中的引用传递原始类型,所以你应该声明Wrapper类,然后调用你的方法,如下所示:

class MyInt{
   public int value=0;

}

在这里,您将100%确定MyInt的对象将按值传递,但它本身就是引用,因此您可以获得所需内容。重新实现我们的功能:

 void function(int a, int b, MyInt counter,MyInt result){
        if(b==0 || a==0)
            return 0;
        if(counter==b)
            return 1;
        else{
            result.value+=a;
            counter.value++;
            function(a,b,counter,result);
        }
    }

像下面这样调用你的方法,一切都应该有效:

int a=2,b=5;
MyInt counter=new MyInt();
MyInt result=new MyInt();
function(a,b,counter,result);

答案 1 :(得分:0)

你几乎就在那里:只需添加result += recursiveProduct(a, b--);而不是仅仅调用该函数。

编辑:用b-1调用它而不用b -

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

我建议您简化代码。

这样的东西
return b == 0 ? 0 : a + fn(a, b-1);