< 返回版块

yueruijie 发表于 2021-04-09 23:41

Tags:rust,递归

static G_MAP: Lazy<Mutex<HashMap<i32, i32>>> = Lazy::new( || { let map: HashMap<i32, i32> = HashMap::new(); Mutex::new(map) } );

fn main() { println!("{:?}", fib(20)); }

fn fib(num: i32) -> i32 { if num == 1 || num == 2 { return 1; }

if G_MAP.lock().unwrap().get(&num) == None {
    let a = fib(num - 1) + fib(num - 2);
    G_MAP.lock().unwrap().insert(num, a);
    return a;
}
G_MAP.lock().unwrap().get(&num).unwrap().abs()

}

static G_MAP: Lazy<Mutex<HashMap<i32, i32>>> = Lazy::new( || { let map: HashMap<i32, i32> = HashMap::new(); Mutex::new(map) } );

fn main() { println!("{:?}", fib(20)); }

fn fib(num: i32) -> i32 { if num == 1 || num == 2 { return 1; }

if G_MAP.lock().unwrap().get(&num) == None {
    G_MAP.lock().unwrap().insert(num, fib(num - 1) + fib(num - 2));
    return a;
}
G_MAP.lock().unwrap().get(&num).unwrap().abs()

}

评论区

写评论
作者 yueruijie 2021-04-10 19:43

秒懂 谢大佬!

gwy15 2021-04-10 10:20

Mutex 不可重入,G_MAP.lock().unwrap() 的时候就持锁了,调用 insert 的时候递归,死锁了

Mike Tang 2021-04-09 23:50

按markdown改一下

1 共 3 条评论, 1 页