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

재귀를 통해 구현하려는 수학 수식을 제공 할 수 있습니까? 나는 호너의 알고리즘에 익숙하지 않고 위키는 그다지 도움이되지 못했습니다. 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