Rust递归对数函数:输入整数返回浮点数结果异常求助
Rust递归对数函数返回整数的问题解决
你的问题和整数转浮点数操作无关,核心是递归函数的逻辑错误——当前代码只是在统计x中包含多少个b的整数次幂(即向下取整的对数),而非真正的数学对数。
错误原因分析
你的递归终止条件写错了:当x < b时直接返回0.0,这相当于丢弃了对数的小数部分。以测试用例x=11, b=3为例:
- 第一次调用:
11 >=3,计算1 + log(11/3≈3.666, 3) - 第二次调用:
3.666 >=3,计算1 + log(3.666/3≈1.222,3) - 第三次调用:
1.222 <3,返回0.0
最终总和为1+1+0=2,自然是整数。
修正方案
只需要修改终止条件:当x <b时,返回数学意义上的log_b(x)(利用自然对数或常用对数转换计算),而不是0.0。
修正后的代码:
fn log(x: f64, b: f64) -> f64 { if x < b { // 用自然对数转换计算log_b(x) return x.ln() / b.ln(); // 也可以用常用对数实现:x.log10() / b.log10() } 1.0 + log(x / b, b) } fn main() { let test_num1: i64 = 3; let test_num2: i64 = 11; let y: f64 = log(test_num2 as f64, test_num1 as f64); println!("\nDEBUGGING RESULT = {}\n", y); }
运行后输出:
DEBUGGING RESULT = 2.1826583380516717
补充说明
如果不需要递归实现,直接使用标准库的对数转换会更简洁高效:
fn log(x: f64, b: f64) -> f64 { x.ln() / b.ln() }
内容的提问来源于stack exchange,提问作者aaries
相关产品推荐
相关产品推荐

