我想記住一個遞歸的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