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)

获得双倍价值。

于 2013-04-22T14:53:44.593 回答
2

该表达式1/fact(n)进行整数除法,如果阶乘大于一,则将产生零。只需将其更改为1.0/fact(n).

于 2013-04-22T14:54:03.807 回答