递归函数返回类型错误

时间:2017-08-05 12:49:01

标签: java recursion biginteger

我写了一个以int为param的递归函数,并返回BigInteger。似乎没有什么不对,但有一行以红色加下划线。

如果情况显而易见,我道歉,但目前我无法解决这个问题。

 public static BigInteger factorial(int a){
        BigInteger tot=BigInteger.valueOf(a);
        if(a>1)tot*=factorial(a-1);
        return tot;
    }

if(a>1)tot*=(factorial(a-1));行用红色加下划线。

错误:

  

必需:BigInteger,Found:int

同时:

public static void main(String[] args) {
    BigInteger a=f(8);
}

public static BigInteger f(int a){
    BigInteger g=BigInteger.valueOf(a);
    return g;
}

...作品。

来自Intellij Idea。我缺少一些基本而重要的概念吗?谢谢。

编辑:正如用户clebe45所解释的那样,答案是java 不支持运算符重载,这与我不熟悉的c ++不同。如果有人发现这是重复,请删除,我向我道歉。

2 个答案:

答案 0 :(得分:2)

Java不支持运算符重载,因此您不能在其上使用乘法*运算符。相反,你应该使用:

  

public BigInteger multiply(BigInteger val)

答案 1 :(得分:1)

*=不适用于BigInteger。请改用multiply

if (a > 1) tot = tot.multiply(factorial(a - 1));