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
相关产品推荐
相关产品推荐

