关键词: 实验4 求和方法的一般化 , 模板方法模式,通用函数,高阶函数
- 实验目的:设计通用的求和函数,理解什么是模板方法模式以及与行为参数化的关系。
- 实验内容:考虑数列或级数求和(或求近似值)的若干例子,并设计通用的求和函数。
- 求[a,b]之间自然数的和;//
- 求[a,b]之间自然数的立方的和
- 求调和级数前n项的和,其中调和级数为H(n)= 1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n
- 求Pi,其中pi/8 = 1/(1*3)+1/(5*7)+1/(9*11)+...
- 求函数的定积分
起点
Demo中搜集了若干求和例子的代码,代码中按照[SICP 1.3.1]的命名方式,如sum_integers求代数和,sum_cubes求立方数的代数和。你的任务是思考从中提取通用的骨架。
package chap2.templateMethod.sum;
import static yqj2065.util.Print.pln;
public class Demo{
//1、若干的函数拥有相似的代码结构
public static void test() {
pln("代数和" + sum_integers(1, 10));
pln("pi=" + pi(10000));
}
//求[a,b]之间自然数的和//
public static int sum_integers(int a, int b) {
int sum = 0;
for (int i = a; i <= b; i++) {
sum += i;
}
return sum;
}
//立方数的代数和//
private static double cube(int x) {
return x * x * x;
}
public static int sum_cubes(int a, int b) {
int sum = 0;
for (int i = a; i <= b; i++) {
sum += cube(i);
}
return sum;
}
/**
* 求Pi,the sum of a sequence of terms in the series
* 1/(1*3)+1/(5*7)+1/(9*11)+...
*
* @param x
* @return
*/
private static double item(int x) {
return 1.