0

ユーザーが入力した数 n に対してオイラー数 e を求めたいのですが、論理部分に問題があり、2 を入力すると 2.5 の正解が得られないようで、代わりに 2 が得られます。入力が何であれ、常に2の答えを得ます。階乗は正しい答えを出力するため、問題はオイラー法にあります。これがコードです。

import java.util.*;

 public class pract5ex3 {
    public static int fact (int n){
    if (n==0 || n==1){
            return 1;
    }
    else {
    return n*fact(n-1);
    }

}
public static double constantRec(int n){
    if (n == 0){

    return 1;
    }
    else {

    return 1/fact(n)+constantRec(n-1);
    }
}

public static void main (String []args) {
    Scanner s= new Scanner (System.in);
    System.out.println("enter number");
    int n =s.nextInt();

    int factorial = pract5ex3.fact(n);
    double euler = pract5ex3.constantRec(n);
    System.out.println(factorial);
    System.out.println(euler);
}

}

4

2 に答える 2

3

整数除算に注意してください。

使用する:

1.0/fact(n)

double 値を取得します。

于 2013-04-22T14:53:44.593 に答える
2

この式1/fact(n)は、factorial が 1 より大きい場合にゼロになる整数除算を行います。に変更するだけ1.0/fact(n)です。

于 2013-04-22T14:54:03.807 に答える