2017-08-05 27 views
1

intを引数とする再帰関数を書き、BigIntegerを返します。何も間違っているとは思われませんでしたが、1行に赤で下線が引かれています。再帰関数の戻り値の型エラー

これはあまりにも明白な場合はお詫び申し上げますが、現在のところ私はこれを回避することはできません。

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));には赤で下線が引かれています。

エラー:同時に

Required: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++とは異なり、を演算子オーバーロードをサポートしていないということです。誰かが重複していることを発見した場合は、削除してください、私は謝罪します。

+1

をBigInteger's '上のすべての基本的な数学の操作は、それぞれの[クラスメソッド]で行う必要があります(https://docs.oracle.com/javase/7/docs/api/java /math/BigInteger.html) – Isac

答えて

2

Javaは、演算子のオーバーロードをサポートしていません。代わりに、使用する必要があります。

public BigInteger multiply(BigInteger val)

1

*= BigIntegerでは機能しません。代わりにmultiplyを使用してください:あなたはそれを乗算*演算子を使用することはできませんので

if (a > 1) tot = tot.multiply(factorial(a - 1)); 
関連する問題