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

Rust递归函数中动态扩展数组/向量的实现问题

Rust递归算法中的数组/向量使用问题

修正后的可编译代码

fn main() {
    println!("{}", cumulated_evaluation(Vec::new(), 10));
}

fn cumulated_evaluation(mut arr: Vec<String>, depth: u32) -> i64 {
    if depth == 0 {
        return 0;
    }
    // 若需保留原始arr用于后续调用,需先克隆再修改
    let mut new_arr = arr.clone();
    new_arr.push("some string".to_string());
    
    let recursive_result = cumulated_evaluation(new_arr, depth - 1);
    recursive_result + evaluation_from_external_crate(&arr)
}

// 模拟外部crate的函数
fn evaluation_from_external_crate(_: &[String]) -> i64 {
    // 此处替换为实际逻辑
    1
}

问题解答

  • 数组大小必须编译时确定的解决
    Rust固定大小数组[T]的长度是编译期常量,无法在运行时动态追加元素,完全不适合递归中动态扩展集合的场景。改用Vec<String>(动态向量)是正确选择,它支持运行时动态增删元素,内存自动管理。

  • 用Vec<String>调用外部函数的方法
    直接传递&arr即可。因为Vec<T>实现了Deref<Target=[T]>特性,当取Vec<String>的引用时,Rust会自动将其转换为&[String],完美匹配外部函数的参数要求。

内容的提问来源于stack exchange,提问作者user10165777

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:02:38