Horner的小数部分递归算法 – Java

我正在尝试创建一个递归方法,使用Horner的算法将基数n中的小数转换为基数10.我在这里搜索过,但是找不到任何处理小数部分的细节。 作为一个抬头,我在递归时非常弱,因为我还没有在我的编程课程中正式学习它,但是已经被另一个类分配了它。

我能够创建一个方法来处理数字的整数部分,而不是小数部分。

我觉得我写的方法非常接近,因为它让我的测试数字的答案加倍(可能是因为我测试的是基数2)。

传递的第一个参数是一个填充系数的int数组。 我并不太关心系数的顺序,因为我正在使所有系数相同以测试它。

第二个参数是基础。 第三个参数初始化为系数减1,我也用于整数部分方法。 我尝试使用系数的数量,但这是从数组中走出来的。

我尝试将基数再划分一次,因为这会给我正确的答案,但如果我在基本案例返回语句或最终返回语句的末尾这样做,它就不起作用。

因此,当我尝试将0.1111 base 2转换为base 10时,我的方法返回1.875 (正确答案为0.9375的两倍)。

任何提示将不胜感激!

//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]; } 

观察到fracHorner总是返回一个至少等于coef[it]的值,因为它要么返回coef[it] ,要么将一些正数添加到coef[it] 。 由于在测试中coef[it] >= 1 ,因此它将始终返回大于或等于1的数字。

它相对容易修复:将coef[it]除以base

 public static double fracHorner(int[] coef, int base, int it) { if (it == 0) { return ((double)coef[it])/base; } return (fracHorner(coef, base, it-1) + coef[it])/base; }