【问题标题】:Can rust return a recursively built solution?rust 可以返回递归构建的解决方案吗?
【发布时间】:2021-08-02 07:49:05
【问题描述】:

在动态编程问题中,解决方案由较小的部分组成并返回给调用者。一个超级简化的版本是基于计数递归地构建一个列表。 Rust 生命周期似乎使这变得更加复杂。是否可以使用 rust 完全在一个函数或一组函数中构建解决方案,然后返回它,或者您是否总是需要传入一个可变的结果变量,以便保存解决方案的变量具有保证的生命周期在将使用它的范围内存在吗?

//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);
}

【问题讨论】:

  • 正如 falsetru 的回答所显示的,直接的等价物工作得很好,你有什么特别的问题吗?
  • 我试图用一个 memo 对象来记忆一个数字列表求和的可能方法,该对象由一个指向导致该总和的值列表的当前总和哈希键组成。我在尝试返回本地存储的结果时遇到了麻烦。然后我读到 rust 不能返回对临时值的引用,所以我试图传递对可变哈希图的引用,这在从基本情况返回时导致编译器错误。 falsetru 为我指明了正确的方向。

标签: recursion rust dynamic-programming


【解决方案1】:
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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2013-07-22
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多