小编pic*_*log的帖子

在 Rust 中的多个函数调用中保持变量处于活动状态

我正在尝试在 Rust 中记忆递归 collat​​z 序列函数,但是我需要记忆值的哈希图来在单独的函数调用中保留其内容。有没有一种优雅的方法可以在 Rust 中做到这一点,或者我是否必须在 main 中声明 hashmap 并每次将其传递给函数?我相信每次调用该函数时,哈希映射都会被重新声明为空映射。这是我的代码:

fn collatz(n: int) -> int {
    let mut map = HashMap::<int, int>::new();
    if map.contains_key(&n) {return *map.get(&n);}
    if n == 1 { return 0; }
    map.insert(n, 
        match n % 2 {
            0 => { 1 + collatz(n/2) }
            _ => { 1 + collatz(n*3+1) }
        }
    );
    return *map.get(&n);
}
Run Code Online (Sandbox Code Playgroud)

附带说明一下,为什么当我在 HashMap 中插入和取出项目时需要添加所有 & 和 * ?我这样做是因为编译器抱怨并添加它们修复了它,但我不确定为什么。我不能只按值传递吗?谢谢。

memoization collatz rust

6
推荐指数
1
解决办法
3525
查看次数

标签 统计

collatz ×1

memoization ×1

rust ×1