Horner的递归算法返回错误的结果

时间:2012-09-24 18:20:22

标签: java algorithm recursion

  

可能重复:
  Horner's recursive algorithm for fractional part - Java

我正在为Horne'r算法编写一个程序,我会说实话,我对递归没有太多经验。我有这个方法设置只接受一个分数(有另一个方法接受并返回整数),它将返回从基数'r'转换为基数10的结果。我不确定为什么,但方法不似乎正在经历最后的迭代。关于我需要做些什么来纠正这个问题的任何建议都将不胜感激。

(ex: c = 011, xFinal = 2, i = 2)
Expected answer = .375
Actual answer returned = .75

public static double getHornerFraction(long[] c, int xFinal, int i) {
    if (i == 0) {
        return ((double)c[i])/xFinal; 
    }
    return (getHornerFraction(c, xFinal, i-1) + c[i])/xFinal;
}

1 个答案:

答案 0 :(得分:4)

通过查看您指定的内容和您的期望,我认为问题是您正在以错误的方向行走数组c或以其他方式错误地指定它。我认为你想要做的是将数组从索引0传递到c.length

public static double getHornerFraction(long[] c, int xFinal, int i) {
    if (i == c.length) {
        return 0;
    }
    return (getHornerFraction(c, xFinal, i+1) + c[i])/xFinal;
}

使用c = {0,1,1}, xFinal = 2, i = 0调用上述函数,它应该给出您期望的结果。