我正在尝试创建一种递归方法,该方法使用霍纳算法将以 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];
}