2012-09-24 43 views
2

可能重复:
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; 
} 
+3

你能提供你正试图通过递归实现的数学公式吗?我对Horner的算法并不熟悉,wiki并没有那么有用:D – gtgaxiola

+1

我有同样的问题,所以我只是从OP的预期推断出算法。 –

+0

似乎不是同一个Kwariz。这个问题涉及遗忘除以基数,而不是使递归方向错误。 – IronMan84

回答

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,它应该给你所期望的上述功能。

+0

这给出了预期的结果。 – gtgaxiola

+0

谢谢Tim Bender。你在现场。非常感谢您的帮助 – gotguts