java - 自适应正交算法 - 递归到迭代

标签 java algorithm

我想知道是否可以使该算法迭代而不是递归,如果可行,有人可以帮助我吗?

public static double adaptiveQuadrature(double a, double b) {
    double h = b - a;
    double c = (a + b) / 2.0;
    double d = (a + c) / 2.0;
    double e = (b + c) / 2.0;
    double Q1 = h / 6 * (f(a) + 4 * f(c) + f(b));
    double Q2 = h / 12 * (f(a) + 4 * f(d) + 2 * f(c) + 4 * f(e) + f(b));
    if (Math.abs(Q2 - Q1) <= EPSILON)
         return Q2 + (Q2 - Q1) / 15;
    else 
         return adaptiveQuadrature(a, c) + adaptiveQuadrature(c, b);
}

static double f(double x) {
    return Math.exp( - x * x / 2) / Math.sqrt(2 * Math.PI);
}

非常感谢您的帮助!

最佳答案

我不这么认为。步骤的大小取决于在初始区间的端点处进行的函数评估,然后在子区间的端点处进行。该模式不是渐进的,您无法组织一个会提前“猜测”步骤的循环。

当然,您可以通过显式堆栈进行反递归,但这不会从根本上改变过程的性质。

关于java - 自适应正交算法 - 递归到迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789644/

相关文章:

java - 为什么 Java 允许类型不安全的数组赋值?

java - 如何将 JSONObject 转换为自定义 Java 类?

algorithm - 压缩矩阵乘法

java - 高效的优先级列表

java - Google App Engine Java 后端

Java - 如何调整 GroupLayout 中的组件大小

java - 泛型、复制构造函数、克隆方法

algorithm - 关于任务并行化的问题

algorithm - 是否有开源地址解析器(位置)算法?

java - 如何使用流将此程序转换为 Java 8 函数式风格?