2012-09-24 46 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