Lat*_*han 7 java algorithm recursion
我正在尝试创建一个递归方法,使用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];
}
Run Code Online (Sandbox Code Playgroud)
观察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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |