gpt4 book ai didi

memoization - 在 Rust 中的多个函数调用中保持变量存活

转载 作者:行者123 更新时间:2023-11-29 07:53:21 31 4
gpt4 key购买 nike

我正在尝试在 Rust 中内存一个递归的 collat​​z 序列函数,但是我需要内存值的散列图来在不同的函数调用中保存它的内容。有没有一种优雅的方法可以在 rust 中执行此操作,还是我必须在 main 中声明 hashmap 并将其每次传递给函数?我相信每次调用该函数时,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);
}

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

最佳答案

您可以使用 thread_local用于线程局部静态。

thread_local! (static COLLATZ_MEM: HashMap<i32, i32> = HashMap::new());
fn collatz(n: i32) -> i32 {
COLLATZ_MEM.with (|collatz_mem| {
0 // Your code here.
})
}

附言还有一个很棒的 lazy-static可用于真正全局静态缓存的宏。 Here这是一个例子。

关于memoization - 在 Rust 中的多个函数调用中保持变量存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752775/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com