我正在努力学习编程,我正处于学习递归的阶段。在此之前,我已成功解决问题,但使用循环。现在,因为递归对我来说非常有趣,我想知道是否可以将循环转换为递归方法。我做了我的尝试,但我已经得到了一种无限的计算。
有人可以帮我一把吗?感谢。
这是我的代码。
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--);
}
}
}
答案 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 &counter
和int 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);