Java实现递推函数结果不符合预期,错在哪里?
存在的问题
- 整数除法逻辑错误:Java中两个int类型数值做除法时默认执行整数除法,会直接截断小数部分,你代码中写的
4/3实际运算结果为1、4/7运算结果为0、5/7运算结果为0、8/5运算结果为1、7/2运算结果为3、3/7运算结果为0,所有分数计算完全不符合数学公式的要求,是结果错误的核心原因。 - 返回值类型不合理:递推公式的计算结果均为非整数,你用
int类型存储返回值会强制丢弃小数部分,进一步放大计算误差。 - 递归实现存在栈溢出风险:当入参
t数值较大时,递归深度过大会触发栈溢出错误,生产环境建议替换为迭代实现。
修正后代码示例
// 返回值改为double,所有分数用浮点形式计算 double A(int t) { double A0 = 3; if (t > 0) { A0 = ((4.0 / 3) * A(t - 1)) - ((4.0 / 7) * C(t - 1)); return A0; } return A0; } double B(int t) { double B0 = 5; if (t > 0) { B0 = ((5.0 / 7) * B(t - 1)) - ((8.0 / 5) * A(t - 1)); return B0; } return B0; } double C(int t) { double C0 = 10; if (t > 0) { C0 = ((7.0 / 2) * C(t - 1)) - ((3.0 / 7) * B(t - 1)); return C0; } return C0; }
内容的提问来源于stack exchange,提问作者aniani2020
相关产品推荐
相关产品推荐

