Я пытаюсь запомнить рекурсивную функцию последовательности коллаца в ржавчине, однако мне нужна хэш-карта запомненных значений, чтобы сохранить ее содержимое при отдельных вызовах функций. Есть ли элегантный способ сделать это в ржавчине, или мне нужно объявлять хэш-карту в main и каждый раз передавать ее функции? Я считаю, что хэш-карта переопределяется как пустая карта каждый раз, когда я вызываю функцию. Вот мой код:
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? Я просто сделал это, потому что компилятор жаловался, и добавление их исправило, но я не уверен, почему. Разве я не могу просто пройти по значению? Спасибо.