我想记住一个递归的collatz序列函数生锈,但是我需要memoized值的hashmap来保持其内容跨单独的函数调用。有没有一种优雅的方式来防止这种情况发生,或者我必须在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中的?我只是这样做,因为编译器抱怨,并加入他们修复它,但我不知道为什么。我能不能通过价值传递?谢谢。
到local_data的链接被破坏 – Gevious