一道java编程题当n为多少时,下列公式s(n)与s(n+2)的值之间结果的差少于0.00001 s(n)=1/2!+1

问题描述:

一道java编程题
当n为多少时,下列公式s(n)与s(n+2)的值之间结果的差少于0.00001 s(n)=1/2!+1/4!+1/6!+1/8!.+1/n!
1个回答 分类:综合 2014-10-29

问题解答:

我来补答
用两个map存储中间计算的过程数据,可以提高执行效率import java.util.HashMap;
import java.util.Map;

public class $ {

    private static Map<Long, Long> jiechengMap = new HashMap<Long, Long>();
    private static Map<Long, Double> snMap = new HashMap<Long, Double>();

    public static void main(String[] args) {

        int i = 2;
        double lastValue = 0;
        double result;
        while (true) {
            result = getResult(i);
            if (result - lastValue <= 0.00001) {
                System.out.println("差少于0.00001是的N是:" + i);
                System.out.println(jiechengMap);
                System.out.println(snMap);
                return;
            } else {
                i += 2;
                lastValue = result;
            }
        }
    }

    private static double getResult(long num) {

        if (num <= 0) {
            snMap.put(0L, 0D);
            return 0;
        }
        Double tmp = snMap.get(num);

        if (tmp != null) {
            return tmp;
        }

        long jiecheng = getJiecheng(num);

        tmp = getResult(num - 2) + 1.0 / jiecheng;

        snMap.put(num, tmp);

        return tmp;
    }

    private static long getJiecheng(long num) {

        Long result = jiechengMap.get(num);

        if (result != null) {
            return result;
        }

        if (num <= 1) {
            jiechengMap.put(num, 1L);
            return 1L;
        }

        result = getJiecheng(num - 1) * num;
        jiechengMap.put(num, result);

        return result;
    }
}差少于0.00001是的N是:10
{1=1, 2=2, 3=6, 4=24, 5=120, 6=720, 7=5040, 8=40320, 9=362880, 10=3628800}
{0=0.0, 2=0.5, 4=0.5416666666666666, 6=0.5430555555555555, 8=0.5430803571428571, 10=0.5430806327160493}
 
 
展开全文阅读
剩余:2000
上一页:求形状的题不会