华为机试题--数列求和

来源:互联网 发布:js屏蔽查看网页源代码 编辑:程序博客网 时间:2024/05/16 11:40

一、问题描述

编写程序,输入一个正整数n,求下列算式的值。
要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。
1+1/2!+ .... +1/n!
输出保留5位小数。
下面是一些合理的表达式的例子:
Input         5                
Output      1.71667 

二、算法

package com.albertshao.csi.interview;import java.math.BigDecimal;import java.math.RoundingMode;import java.text.DecimalFormat;/** * 数列求和 * @author albertshao * */public class Main35 {DecimalFormat df = new DecimalFormat(".00000");public double fact(int k) {double sum = 1d;if (k == 0) {return sum;} else {sum = k * fact(k-1);}return sum;}public double getResult(int n) {double result = 0d;for (int i = 1; i <= n; i++) {result += 1 / fact(i);}return Double.parseDouble(df.format(result));}public static void main(String[] args) {Main35 m = new Main35();System.out.println(m.getResult(5));}}

运行结果

1.71667

看点:递归方法的书写, 小数点位数的保留


0 0
原创粉丝点击