ホーナーのアルゴリズムを使用して基数 n の小数を基数 10 に変換する再帰的な方法を作成しようとしています。注意点として、私はプログラミングのクラスで正式に再帰を学んでおらず、別のクラスで再帰を割り当てられているため、再帰がかなり苦手です。
小数部分だけでなく、整数部分を処理するメソッドを作成できました。
私が書いた方法は、テスト数値の答えを 2 倍にすることができるので、かなり近いように感じます (おそらく、基数 2 をテストしているためです)。
渡される最初のパラメーターは、係数で満たされた int 配列です。テストのためにすべての係数を同じにしているので、係数の順序にはあまり関心がありません。
2 番目のパラメーターはベースです。3 番目のパラメーターは、係数の数から 1 を引いた値に初期化されます。これは、整数部分のメソッドにも使用されます。係数の数を使用してみましたが、それは配列から外れています。
正しい答えが得られるので、もう一度基数で割ってみましたが、基数ケースの return ステートメントまたは最後の return ステートメントの最後でそうするとうまくいきません。
したがって、0.1111基数 2 を基数 10 に変換しようとすると、メソッドは1.875を返します(正解の0.9375の 2 倍)。
ヒントをいただければ幸いです。
//TL;DR
coef[0] = 1; coef[1] = 1; coef[2] = 1; coef[3] = 1;
base = 2; it = 3;
//results in 1.875 instead of the correct 0.9375
public static double fracHorner(int[] coef, int base, int it) {
if (it == 0) {
return coef[it];
}
return ((float)1/base * fracHorner(coef, base, it-1)) + coef[it];
}