agile java 等比数列求和

好久没有写过东西了,最近正在看agile java (测试驱动开发)这本书,其开发思想方面的不再细说,下面这个是前两天在QQ群里的群友求助的——等比数列前N项和的算法,根据测试驱动开发的思想,写了这个方法,但我知道还有很多不足之处,请高手多多指教,谢谢!

 

一、先看测试类ComparesTest代码:


 

import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class ComparesTest { private Compares compares; static final double ACTUAL = 0.05; @Before public void setUp() { compares = new Compares(); } @Test public void testFactorial() { Assert.assertEquals(4, compares.getFactorial(2, 2)); } @Test public void testCompareSum() { int n = compares.getCompareSum(5, 2, 5); System.err.println(n); System.err.println(compares.getCompareSum(0.5,0.5, 5)); Assert.assertEquals(315, n, ACTUAL); } @Test public void testSum() { System.err.println(compares.getCompareSum(2, 5)); Assert.assertEquals(3, compares.getCompareSum(2, 1)); } }  

二、计算等比数列类Compares代码:

 

/** * 求等比数列及其前n项和 * @author lei public class Compares { /** * 一个浮点数的n次方 * * @param num * @param n * @return */ public double getFactorial(double num, int n) { if (num == 0) return 0.0; if (n < 0) return -1; return n > 0 ? num * getFactorial(num, n-1) : 1; } /** * 一个整数的n次方 * * @param num * @param n * @return */ public int getFactorial(int num, int n) { if (num == 0) return 0; if (n < 0) return -1; return n > 0 ? num * getFactorial(num, n-1) : 1; } /** * 等比数列前n项和,系数和比例都为浮点数 * * @param coefficient * 系数 * @param proportion * 比例 * @param n * 项数 * @return */ public double getCompareSum(double coefficient, double proportion, int n) { return coefficient * getCompareSum(proportion,n); } /** * 等比数列前n项和 系数为浮点数 * * @param coefficient * 系数 * @param proportion * 比例 * @param n * 项数 * @return */ public double getCompareSum(double coefficient, int proportion, int n) { return coefficient * getCompareSum(proportion,n); } /** * 等比数列前n项和 系数和比例都为整数 * * @param coefficient * 系数 * @param proportion * 比例 * @param n * 项数 * @return */ public int getCompareSum(int coefficient, int proportion, int n) { return coefficient * getCompareSum(proportion,n); } /** * 等比数列前n项和,系数为1 * @param p 比例为整数 * @param n 前n项 * @return */ public int getCompareSum(int p, int n) { if (p == 0) return 0; if (n < 0) return -1; return n > 0 ? getCompareSum(p, n-1) + getFactorial(p, n) : 1; } /** * 等比数列前n项和,系数为1 * @param p 比例为整数 * @param n 前n项 * @return */ public double getCompareSum(double p, int n) { if (p == 0) return 0; if (n < 0) return -1; return n > 0 ? getCompareSum(p, n-1) + getFactorial(p, n) : 1; } }  

感觉Compares这个类还不是太简洁,但是个人现在重构能力有限,暂时只能到此了,愿听高人指教!

你可能感兴趣的:(java)