rust return 可以递归构建解决方案吗?
Can rust return a recursively built solution?
在动态规划问题中,解决方案是从较小的部分构建的,并 returned 给调用者。一个超级简化的版本是根据计数递归地构建一个列表。 Rust 生命周期似乎使这变得更加复杂。是否可以使用 rust 完全在一个函数或一组函数中构建解决方案,然后 return 它,或者您是否始终需要传入可变结果变量,以便保存解决方案的变量具有生命周期保证在将使用它的范围内存在?
//result is created inside and passed out
function list_build_recursive(count){
if (count == 0) { return []; }
if (count > 0) {
let result = list_build_recursive(count-1);
result.push(count);
return result;
}
}
console.log(list_build_recursive(5));
//is it possible for result to be created inside and passed out?
pub fn list_build_recursive(count: i32, result: &mut Vec<i32>){
if count > 0 {
list_build_recursive(count-1, result);
result.push(count);
return;
}
}
fn main() {
let result = &mut vec![];
list_build_recursive(5, result);
println!("list is {:?}", result);
}
fn list_build_recursive(count: i32) -> Vec<i32> {
if count == 0 {
vec![]
} else {
let mut result = list_build_recursive(count - 1);
result.push(count);
result
}
}
fn main() {
println!("list is {:?}", list_build_recursive(5));
}
在动态规划问题中,解决方案是从较小的部分构建的,并 returned 给调用者。一个超级简化的版本是根据计数递归地构建一个列表。 Rust 生命周期似乎使这变得更加复杂。是否可以使用 rust 完全在一个函数或一组函数中构建解决方案,然后 return 它,或者您是否始终需要传入可变结果变量,以便保存解决方案的变量具有生命周期保证在将使用它的范围内存在?
//result is created inside and passed out
function list_build_recursive(count){
if (count == 0) { return []; }
if (count > 0) {
let result = list_build_recursive(count-1);
result.push(count);
return result;
}
}
console.log(list_build_recursive(5));
//is it possible for result to be created inside and passed out?
pub fn list_build_recursive(count: i32, result: &mut Vec<i32>){
if count > 0 {
list_build_recursive(count-1, result);
result.push(count);
return;
}
}
fn main() {
let result = &mut vec![];
list_build_recursive(5, result);
println!("list is {:?}", result);
}
fn list_build_recursive(count: i32) -> Vec<i32> {
if count == 0 {
vec![]
} else {
let mut result = list_build_recursive(count - 1);
result.push(count);
result
}
}
fn main() {
println!("list is {:?}", list_build_recursive(5));
}