我将尝试使用 Rust 解决这个问题。
以下是我无法编译的 Rust 代码:
Rust 到 Python3 的翻译如下所示:
以下是我无法编译的 Rust 代码:
use std::collections::HashMap;
fn main() {
// initialize HashMap
let mut fibs: HashMap<u32, u32> = HashMap::new();
fibs.insert(0, 1);
fibs.insert(1, 1);
let mut n = 1;
let mut sum = 0;
while fib(n, &mut fibs) < 4000000 {
sum += if fib(n, &mut fibs) % 2 == 0 {
fib(n, &mut fibs)
} else {
0
};
n += 1;
}
println!("{}", sum);
}
fn fib(n: u32, fibs: &mut HashMap<u32, u32>) -> u32 {
if !fibs.contains_key(&n) {
fibs.insert(n, fib(n - 1, &mut fibs) + fib(n - 2, &mut fibs));
}
*fibs.get(&n).unwrap()
}
error[E0596]: cannot borrow `fibs` as mutable, as it is not declared as mutable
--> src/main.rs:22:35
|
20 | fn fib(n: u32, fibs: &mut HashMap<u32, u32>) -> u32 {
| ---- help: consider changing this to be mutable: `mut fibs`
21 | if !fibs.contains_key(&n) {
22 | fibs.insert(n, fib(n - 1, &mut fibs) + fib(n - 2, &mut fibs));
| ^^^^^^^^^ cannot borrow as mutable
error[E0499]: cannot borrow `fibs` as mutable more than once at a time
--> src/main.rs:22:35
|
22 | fibs.insert(n, fib(n - 1, &mut fibs) + fib(n - 2, &mut fibs));
| ---- ------ ^^^^^^^^^ second mutable borrow occurs here
| | |
| | first borrow later used by call
| first mutable borrow occurs here
error[E0596]: cannot borrow `fibs` as mutable, as it is not declared as mutable
--> src/main.rs:22:59
|
20 | fn fib(n: u32, fibs: &mut HashMap<u32, u32>) -> u32 {
| ---- help: consider changing this to be mutable: `mut fibs`
21 | if !fibs.contains_key(&n) {
22 | fibs.insert(n, fib(n - 1, &mut fibs) + fib(n - 2, &mut fibs));
| ^^^^^^^^^ cannot borrow as mutable
error[E0499]: cannot borrow `fibs` as mutable more than once at a time
--> src/main.rs:22:59
|
22 | fibs.insert(n, fib(n - 1, &mut fibs) + fib(n - 2, &mut fibs));
| ---- ------ first borrow later used by call ^^^^^^^^^ second mutable borrow occurs here
| |
| first mutable borrow occurs here
Rust 到 Python3 的翻译如下所示:
def main():
fibs = {}
fibs[0] = 1
fibs[1] = 1
n = 1
summ = 0
while fib(n, fibs) < 4000000:
summ += fib(n, fibs) if fib(n, fibs) % 2 == 0 else 0
n+=1
print(summ)
print(fibs)
def fib(n, fibs):
if n not in fibs:
fibs[n] = fib(n-1, fibs) + fib(n-2, fibs)
return fibs[n]
main()
我知道这个具体的实现并不理想,但是我仅仅是为了学习这种语言。我试图只向函数传递一个hashmap的引用。如果不改变解决问题的方法,我怎么能使用可变的HashMap
引用呢?如果可能的话。
&mut &mut T
转换为&mut T
,至少当编译器知道期望的是&mut T
时。 - user395760