斐波那契(非递归)第 47 期后出现恐慌

Fibonacci (non recursive) panics after 47th term

我正在编写一个非递归计算斐波那契数列的程序。没有什么花哨。程序运行,但在第 47 个任期出现恐慌,然后终止。这是错误:

.
.
.
count 45 - fib - 701408733
count 46 - fib - 1134903170
count 47 - fib - 1836311903
thread 'main' panicked at 'attempt to add with overflow', src\main.rs:20:23
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\fib.exe 50` (exit code: 101)

最多 46 个,有效。因此,如果我执行 cargo run 46,它就会起作用。任何高于它的数字,它都会恐慌。

我不知道怎么了。这是代码:

fn main() {
    let args: Vec<String> = std::env::args().collect(); //Taking the range from the user

    let mut a: u32 = 0;
    let mut b: u32 = 1;
    let mut count: u32 = 0;

    let range: u32 = args[1].parse().unwrap(); // Converting input String to (unsigned) int

    if range <= 0 {
        println!("Please enter positive number greater than 0 please");
    } else if range == 1 {
        println!("{}", args[1])
    } else {
        while count < range {
            println!("count {} - fib - {}", count+1, &a);
            let nth = a + b;
            a = b;
            b = nth;
            count += 1;
        }
    }
}

检查错误信息:panicked at 'attempt to add with overflow' 这意味着您的下一个斐波那契数太大,无法放入 u32。如果您使用 u64 或任何更大的整数大小,将会起作用。 检查文档中每个数字的限制。