You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust递归对数函数:输入整数返回浮点数结果异常求助

Rust递归对数函数返回整数的问题解决

你的问题和整数转浮点数操作无关,核心是递归函数的逻辑错误——当前代码只是在统计x中包含多少个b的整数次幂(即向下取整的对数),而非真正的数学对数。

错误原因分析

你的递归终止条件写错了:当x < b时直接返回0.0,这相当于丢弃了对数的小数部分。以测试用例x=11, b=3为例:

  1. 第一次调用:11 >=3,计算1 + log(11/3≈3.666, 3)
  2. 第二次调用:3.666 >=3,计算1 + log(3.666/3≈1.222,3)
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:50:38