我编写了一个 Rust 程序来查找斐波那契数。它适用于较小的数字,但对于较大的数字,它会过早退出:
fn fib(n: u8) -> u64 {
let mut prev: u64 = 0;
let mut curr: u64 = 1;
for _ in 1..n {
let next = prev + curr;
prev = curr;
curr = next;
}
curr
}
fn main() {
for n in 1..95 {
let curr = fib(n);
println!("fibonacci {} is {}", n, curr);
}
}
“fibonacci 93 ...”后的输出显示:
thread 'main' panicked at src/main.rs:6:20:
attempt to add with overflow
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
如何让它适用于大量数据?我们可以使用智能盒指针在堆上存储大量数字吗?
如何让它适用于大量数据?
你必须使用“bignum”类型的库(无法帮助你选择一个,因为我对景观一无所知)。
我们可以使用智能盒指针在堆上存储大量数字吗?
你可以,但如果你仍然使用固定大小的整数,这不会改变任何东西:u64 是 64 位,仅此而已。 fib(94) 需要 65 位,因此无法容纳。如果您只想运行到 fib(95),您可以使用 u128,它可以一直工作到
fib(186)
(包含)。