You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现仅含两个参数的递归Horner算法求助

递归实现固定双参数的霍纳法则

因为要求主函数只能有double[] a和double x两个参数,没法直接传入递归需要的索引变量,最直接的解决办法是写一个私有辅助递归函数,把索引参数放在辅助函数里,主函数只负责调用辅助函数并传递初始索引。

假设数组按「低次到高次」存储(a[0]是常数项,a[len-1]是最高次项系数)

比如多项式 P(x) = a₀ + a₁x + a₂x² + ... + aₙxⁿ 对应数组 a = [a₀, a₁, a₂, ..., aₙ],完整实现代码如下:

public static double evalHornerRec(double[] a, double x) {
    // 初始调用辅助函数,从最高次项的索引开始递归
    return hornerHelper(a, x, a.length - 1);
}

// 私有辅助递归函数,负责处理带索引的递归逻辑
private static double hornerHelper(double[] a, double x, int n) {
    // 递归终止条件:到达常数项,直接返回
    if (n == 0) {
        return a[0];
    }
    // 霍纳法则递归逻辑:先算前n-1项的结果,乘x后加当前项
    return hornerHelper(a, x, n - 1) * x + a[n];
}

假设数组按「高次到低次」存储(a[0]是最高次项系数,a[len-1]是常数项)

比如多项式 P(x) = aₙxⁿ + ... + a₁x + a₀ 对应数组 a = [aₙ, ..., a₁, a₀],调整后的代码如下:

public static double evalHornerRec(double[] a, double x) {
    // 初始调用辅助函数,从最高次项的索引(0)开始递归
    return hornerHelper(a, x, 0);
}

private static double hornerHelper(double[] a, double x, int n) {
    // 递归终止条件:到达常数项,直接返回
    if (n == a.length - 1) {
        return a[n];
    }
    // 霍纳法则递归逻辑:当前项乘x后加后续项的结果
    return a[n] * x + hornerHelper(a, x, n + 1);
}

逻辑说明

  • 核心思路和你找到的三参数递归版本完全一致,只是把索引参数从主函数剥离到了辅助函数中,既满足了作业对主函数参数的限制,又实现了递归。
  • 关键要和作业中数组的存储约定匹配,确认系数的顺序后选择对应的实现即可。

内容的提问来源于stack exchange,提问作者yungboi22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:55:22