斐波那契(非递归)第 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
或任何更大的整数大小,将会起作用。
检查文档中每个数字的限制。
我正在编写一个非递归计算斐波那契数列的程序。没有什么花哨。程序运行,但在第 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
或任何更大的整数大小,将会起作用。
检查文档中每个数字的限制。