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
相关产品推荐
相关产品推荐

