java - Horner 的小数部分递归算法 - Java

标签 java algorithm recursion

我正在尝试创建一种递归方法,该方法使用 Horner 算法将以 n 为底的小数转换为以 10 为底的小数。我在这里和所有地方都进行了搜索,但找不到任何地方详细处理小数部分。提醒一下,我在递归方面很弱,因为我还没有在我的编程课上正式学习它,但已经被另一个类(class)分配了。

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

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

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

第二个参数是基础。第三个参数初始化为系数数减 1,我也将其用于整数部分方法。我尝试使用系数的数量,但它超出了数组。

我又尝试了一次除以基数,因为这会给我正确的答案,但如果我在基本情况 return 语句中或在最终 return 语句的末尾这样做,它就不起作用了。

因此,当我尝试将 0.1111 以 2 为底数转换为以 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;
}

关于java - Horner 的小数部分递归算法 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444587/

相关文章:

java - Java 实现与 UML 规范关于接口(interface)和抽象类的区别

java - Hibernate hql 查询与 sum() 函数一起使用返回空值

java - 使用java将日期时间插入数据库

algorithm - CCC 的 FireHose (S3)

database - 应该从数据库中检查重复项还是捕获异常?

javascript - 如何检查深层对象是否有值(value)

java - Tomcat 6 - Java 代理隧道在 Windows 上失败 - 错误 - 407

c++ - 数独检查器 - 如何检查子网格中的重复项

java - 递归地计算 N 的二进制表示形式中 1 的数量。在JAVA中

java - 欧拉递归的逻辑问题