Java 无乘法、除法和位运算符的乘法,且无循环。递归 公共类多线程{ 公共静态void main(字符串[]args){ System.out.println(“8*9==”+乘法(8,9)); System.out.println(“6*0==”+乘法(6,0)); System.out.println(“0*6==”+乘法(0,6)); System.out.println(“7*-6==”+乘法(7,-6)); } 公共静态整数乘法(整数x,整数y){ int结果=0; 如果(y>0) 返回结果=(x+乘(x,(y-1)); 如果(y==0) 返回结果; if(y

Java 无乘法、除法和位运算符的乘法,且无循环。递归 公共类多线程{ 公共静态void main(字符串[]args){ System.out.println(“8*9==”+乘法(8,9)); System.out.println(“6*0==”+乘法(6,0)); System.out.println(“0*6==”+乘法(0,6)); System.out.println(“7*-6==”+乘法(7,-6)); } 公共静态整数乘法(整数x,整数y){ int结果=0; 如果(y>0) 返回结果=(x+乘(x,(y-1)); 如果(y==0) 返回结果; if(y,java,algorithm,Java,Algorithm,我的问题很简单也很基本,为什么每次“如果”之后“返回”仍然无法通过编译,错误显示缺少返回。因为编译器无法猜测您的三个IFs是否涵盖了所有情况。 如果要简化代码,如果不需要,可以删除最后一个: public class MultiplyViaRecursion{ public static void main(String[] args){ System.out.println("8 * 9 == " + multiply(8, 9)); System.

我的问题很简单也很基本,为什么每次“如果”之后“返回”仍然无法通过编译,错误显示缺少返回。

因为编译器无法猜测您的三个IFs是否涵盖了所有情况。 如果要简化代码,如果不需要,可以删除最后一个:

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;
    }
}
顺便说一下,您还可以删除
result
变量:

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);   
}

简单地说:Java编译器没有那么聪明。它无法推断您的三个
if
语句中的一个必须计算为true。由于编译器认为所有的
if
条件都有可能失败,因此它认为有可能超出
if
块,此时没有
return
语句

相反,尝试使用
if-else
块,如下所示

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);   
}

无法重现您的问题。他发布了编译的代码;他问如果他删除了最后的
return
语句,为什么编译器会失败。
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);
}