我认为这会相对容易,但运行它会产生错误的结果。它可能是结果变量的初始化,但我似乎无法修改代码,以便正确。到目前为止,这是我的进展。
public class test
{
public static void main(String[] args)
{
int num1 = 10;
int num2 = 4;
int res = product(num1, num2);
System.out.println(res);
}
public static int product(int n1, int n2)
{
int result = 0 ;
if (n2 > 0)
{
result = result + n1 ;
product(n1,n2-1) ;
}
return result ;
}
}
答案 0 :(得分:4)
更好的解决方案 * 这里 *
public static int product(int n1, int n2)
{
if (n2 > 1)
{
n1 += product(n1,n2-1) ;
}
return n1;
}
答案 1 :(得分:1)
public static int product(int n1, int n2)
{
int result = 0 ;
if (n2 > 0)
{
result = result + n1 ;
product(n1,n2-1) ;
}
return result ;
}
在这段代码中,每次调用方法时都会产生result = 0,这显然是你不想做的。相反,您应该首先在主代码中初始化它,然后将其传入,如此
public static int product(int n1, int n2, int result)
然后当你做递归时,只需每次传递结果!
像这样:
product(n1, n2-1, result);
你的主要应该是这样的:
public static void main(String[] args)
{
int num1 = 10;
int num2 = 4;
int result = 0;
int res = product(num1, num2, result);
System.out.println(res);
}
这将做什么,是使结果的值可用于你的函数,初始化。
编辑:
在进行递归时,我们必须记住将我们想要的东西设置为我们调用的函数,而不是再次调用该函数,否则,将返回初始答案(在本例中为n1的值)。 / p>
这样做:
public static int product(int n1, int n2, int result)
{
if (n2 > 0)
{
result = result + n1 ;
result = product(n1,n2-1, result) ;
}
return result ;
}
}
答案 2 :(得分:0)
public class Test{
static int result;
public static void main(String...x){
int num1 = 10;
int num2 = 4;
int res = product(num1, num2);
System.out.println(res);
}
public static int product(int n1, int n2)
{
if (n2 > 0)
{
result = result + n1 ;
product(n1,n2-1) ;
}
return result ;
}
}
你的问题在于变量结果,每次调用方法时,变量都会用零初始化它。
答案 3 :(得分:0)
更短的解决方案
public static int product(int n1, int n2) {
return n2 == 0 ? 0 : n1 + product(n1, n2-1);
}
已经优化了(这类似于在CPU中实际实现乘法的方式)
public static int product(int n1, int n2) {
if (n2 == 0) return 0;
int p = product(n1, n2 >> 1);
return p + p + ((n2 & 1) == 0 ? 0 : n1);
}
这将最多递归31次,因为第一个解决方案可能会超过20亿次。