Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
霍纳';分数部分的s递归算法&Java_Java_Algorithm_Recursion - Fatal编程技术网

霍纳';分数部分的s递归算法&Java

霍纳';分数部分的s递归算法&Java,java,algorithm,recursion,Java,Algorithm,Recursion,我试图创建一个递归方法,使用霍纳算法将以n为基数的小数转换为以10为基数的小数。我在这里到处搜索,但找不到任何详细处理小数部分的地方。作为一个提醒,我在递归方面相当弱,因为我还没有在编程类中正式学习过它,但是已经被另一个类分配了它 我能够创建一个方法来处理数字的整数部分,而不是小数部分 我觉得我写的方法非常接近,因为它让我的测试数据的答案翻了一番(可能是因为我在测试base 2) 传递的第一个参数是一个充满系数的int数组。我不太关心系数的顺序,因为我让所有的系数都一样来测试它 第二个参数是基。

我试图创建一个递归方法,使用霍纳算法将以n为基数的小数转换为以10为基数的小数。我在这里到处搜索,但找不到任何详细处理小数部分的地方。作为一个提醒,我在递归方面相当弱,因为我还没有在编程类中正式学习过它,但是已经被另一个类分配了它

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

我觉得我写的方法非常接近,因为它让我的测试数据的答案翻了一番(可能是因为我在测试base 2)

传递的第一个参数是一个充满系数的int数组。我不太关心系数的顺序,因为我让所有的系数都一样来测试它

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

我试着再除以一次基,因为这样会给出正确的答案,但如果在基case return语句中或在最终return语句的末尾这样做,它就不起作用了

因此,当我尝试将0.1111base 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;
}

非常感谢。难怪我总是得到比一个更大的答案。我一定试过除此之外的所有除法组合。这种方法现在起作用了。