高中数学:数列
来源:互联网 发布:怎么和淘宝卖家聊天 编辑:程序博客网 时间:2024/05/17 06:59
需求分析:
概要设计:
详细设计:
编码及单元测试:
数列:
package sequence;public abstract class Sequence {/** * 返回数列第n项 */protected abstract double getAn(int n);/** * 计算数列前n项和 */public double getSum(int n) { double sum=0.0; for(int i=1;i<n;i++) sum+=getAn(i); return sum;}}
等差数列:
package sequence;public class ArithmeticSequence extends Sequence {// 首项private double a1 = 0;// 公差private double d = 0;public ArithmeticSequence(double a1, double d) {this.a1=a1; this.d=d;}public ArithmeticSequence(double am, int m, double an, int n) throws Exception {if(m==n)throw new Exception("两项应为不同项");else{ d=(an-am)/(n-m); a1=an+(1-n)*d;}}/** * 计算数列前n项和 */@Overridepublic double getSum(int n) { return n*a1+n*(n-1)*d/2;}/** * 返回数列第n项 */@Overridepublic double getAn(int n) {return a1+(n-1)*d;}}
等比数列:
package sequence;public class GeometricSquence extends Sequence {//精度设置public static double PRECISION=0.0000001;//首项private double a1=1;//公比private double q=1;public GeometricSquence(double a1, double q) throws Exception { if(Math.abs(q-0)>PRECISION){ this.a1=a1; this.q=q; }else throw new Exception("公比不能为0");}public GeometricSquence(double am, int m, double an, int n) throws Exception {if(m==n)throw new Exception("两项应为不同项");else{ q=Math.pow(an/am, 1/(n-m)); if(Math.abs(q-0)>PRECISION){ a1=an*Math.pow(q, 1-n); } else throw new Exception("公比不能为0");}}@Overridepublic double getSum(int n) { if(q-1>PRECISION) return a1*(1-Math.pow(q, n))/(1-q); else return a1*n;}@Overridepublic double getAn(int n) {return a1*Math.pow(q, n-1);}}
斐波拉契数列:
package sequence;public class FibonacciSequence extends Sequence {// 第一项private double a1;// 第二项private double a2;public FibonacciSequence(double a1, double a2) {this.a1=a1;this.a2=a2;}public double getAn(int n) {switch(n){case 1:return a1;case 2:return a2;default:return getAn(n-1)+getAn(n-2);}}public double getSum(int n) {if(n==1)return a1;elsereturn getSum(n-1)+getAn(n);}}
平方根估算数列:
package sequence;public class SqrtSequence extends Sequence {private double radicand=0.0;//被开方数public SqrtSequence(double radicand) {this.radicand=radicand;}@Overridepublic double getAn(int n) {double precision=1.0;for(int i=0;i<n;i++)precision/=10;double root=0.0;for(double d=1.0;d>=precision;d/=10) for(;Math.pow(root+d, 2)<=radicand;root+=d);return root;}@Overridepublic double getSum(int n) {throw new UnsupportedOperationException();}}
0 0
- 高中数学:数列
- 高中数学
- 高中数学
- 高中数学?
- 高中数学?
- 高中数学?
- 高中数学?
- 高中数学
- 高中数学?
- 高中数学?
- 高中数学?
- 高中数学公式
- 高中数学公式
- 2400 高中数学?
- sdut_java_高中数学?
- 一个高中数学问题
- 高中数学巧记忆
- 高中数学公式大全
- linux主机名的修改
- 错误排查总结-cxf客户端调用报错(任何超类对此上下文都是未知的)
- EQ均衡器常识
- 什么是特征点、特征描述、特征匹配
- Java异常
- 高中数学:数列
- Ajax与Comet的介绍与区别
- docker入门——简单操作
- 详细的图文介绍如何利用XAMPP本地建站的环境配置教程
- nginx status
- 深入理解JQuery插件开发
- [HDU 5512][2015ACM/ICPC亚洲区沈阳站] Pagodas 博弈论
- spring autowired mockito单元测试
- Linux部署tomcat项目