霍纳';分数部分的s递归算法&Java
我试图创建一个递归方法,使用霍纳算法将以n为基数的小数转换为以10为基数的小数。我在这里到处搜索,但找不到任何详细处理小数部分的地方。作为一个提醒,我在递归方面相当弱,因为我还没有在编程类中正式学习过它,但是已经被另一个类分配了它 我能够创建一个方法来处理数字的整数部分,而不是小数部分 我觉得我写的方法非常接近,因为它让我的测试数据的答案翻了一番(可能是因为我在测试base 2) 传递的第一个参数是一个充满系数的int数组。我不太关心系数的顺序,因为我让所有的系数都一样来测试它 第二个参数是基。第三个参数被初始化为系数的个数减去1,我也将其用于整数部分方法。我尝试使用系数的数量,但这超出了数组的范围 我试着再除以一次基,因为这样会给出正确的答案,但如果在基case return语句中或在最终return语句的末尾这样做,它就不起作用了 因此,当我尝试将0.1111base 2转换为base 10时,我的方法返回1.875(正确答案是0.9375的两倍) 任何提示都将不胜感激霍纳';分数部分的s递归算法&Java,java,algorithm,recursion,Java,Algorithm,Recursion,我试图创建一个递归方法,使用霍纳算法将以n为基数的小数转换为以10为基数的小数。我在这里到处搜索,但找不到任何详细处理小数部分的地方。作为一个提醒,我在递归方面相当弱,因为我还没有在编程类中正式学习过它,但是已经被另一个类分配了它 我能够创建一个方法来处理数字的整数部分,而不是小数部分 我觉得我写的方法非常接近,因为它让我的测试数据的答案翻了一番(可能是因为我在测试base 2) 传递的第一个参数是一个充满系数的int数组。我不太关心系数的顺序,因为我让所有的系数都一样来测试它 第二个参数是基。
//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;
}
非常感谢。难怪我总是得到比一个更大的答案。我一定试过除此之外的所有除法组合。这种方法现在起作用了。