public class MultiplyViaRecursion{
public static void main(String[] args){
System.out.println("8 * 9 == " + multiply(8, 9));
System.out.println("6 * 0 == " + multiply(6, 0));
System.out.println("0 * 6 == " + multiply(0, 6));
System.out.println("7 * -6 == " + multiply(7, -6));
}
public static int multiply(int x, int y){
int result = 0;
if(y > 0)
return result = (x + multiply(x, (y-1)));
if(y == 0)
return result;
if(y < 0)
return result = -multiply(x, -y);
return result;
}
}
我的问题非常简单和基本,为什么每次“if”之后“返回”仍然无法通过编译,错误显示缺少返回。
答案 0 :(得分:6)
简单地说:Java编译器并不那么聪明。它无法推断出您的三个if
语句中的一个必须评估为true。由于编译器认为所有if
条件都有可能失败,它认为可能超出if
块,此时没有return
语句。
相反,请尝试使用if else
块,如此。
public static int multiply(int x, int y) {
int result = 0;
if (y > 0)
return result = (x + multiply(x, (y - 1)));
else if (y == 0)
return result;
else
return result = -multiply(x, -y);
}
答案 1 :(得分:1)
因为编译器无法猜测您的三个IF覆盖了所有情况。 如果要简化代码,可以删除不必要的最后一个IF:
public static int multiply(int x, int y){
int result = 0;
if(y > 0)
return result = (x + multiply(x, (y-1)));
if(y == 0)
return result;
return result = -multiply(x, -y);
}
顺便说一句,您还可以删除result
变量:
public static int multiply(int x, int y){
if(y > 0)
return (x + multiply(x, (y-1)));
if(y == 0)
return 0;
return -multiply(x, -y);
}