0
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”之后“return”仍然无法通过编译,错误显示缺少返回。

4

2 回答 2

6

简单地说:Java 编译器并不那么聪明。它不能推断出您的三个 if陈述之一必须评估为真。而且由于编译器认为所有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);
}
于 2012-06-22T03:21:04.097 回答
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);   
}
于 2012-06-22T03:21:00.203 回答