使用Rust完成n阶斐波那契数列
斐波那契数列是一个非常经典的数列,它的定义如下:
F0=0,F1=1,Fn=Fn−1+Fn−2 (n≥2)F0=0,F1=1,Fn=Fn−1+Fn−2 (n≥2)
在本文中,我们将使用Rust编程语言来实现n阶斐波那契数列。我们将使用动态规划法来解决这个问题。
动态规划法
动态规划是一种算法思想,它通常用于解决计算机科学中的优化问题。动态规划法通常使用递推公式和一个数组来记录计算过程中的中间结果,以避免重复计算。
对于斐波那契数列,我们可以使用动态规划法来计算。我们定义一个长度为n+1的数组dyns,用于存储每个斐波那契数列的值。数组中的第i个元素dyns[i]表示第i个斐波那契数列的值。
我们将数组初始化为0。然后,我们可以使用递推公式F(n)=F(n-1)+F(n-2)来计算每个斐波那契数列的值,直到计算到第n个斐波那契数列的值。最后,我们返回dyns[n],它表示第n个斐波那契数列的值。
算法的时间复杂度是O(n),空间复杂度是O(n)。
Rust代码实现
下面是使用Rust实现n阶斐波那契数列的完整代码:
use std::io;
fn main() {
println!("请输入数字,开始计算斐波那契数列:");
loop {
// 获取输入
let mut n: String = String::new();
io::stdin().read_line(&mut n).expect("无法读取行");
// 处理是或不是数字的情况
match n.trim().parse() {
Ok(num) => {
if num > 186 {
println!("超出程序所计算最大上限");
} else {
let n = fibonacci(num);
println!("结果:{}", n);
break;
}
}
Err(_) => {
println!("请输入数字");
}
};
}
}
/**
* n阶斐波那契数列
* # 动态规划法
* **时间复杂度:O(n)**
* **空间复杂度:O(n)**
* ```
* let n: u128 = fibonacci(15)
* println!("结果:{n}");
* ```
*/
fn fibonacci(n: u128) -> u128 {
if n < 2 {
return n;
}
let n = n as usize;
// 生成长度为n+1的数组,值为0,例如[0,0,0,..0]
let mut dyns = vec![0; n + 1];
dyns[0] = 0;
dyns[1] = 1;
for i in 2..=n {
dyns[i] = dyns[i - 1] + dyns[i - 2];
}
return dyns[n];
}
在上面的代码中,我们首先使用std::io模块获取用户输入的数字n。然后,我们使用fibonacci()函数计算n阶斐波那契数列的值,并将结果打印到屏幕上。
结论
在本文中,我们使用Rust编程语言实现了n阶斐波那契数列。我们使用动态规划法来解决这个问题,算法的时间复杂度是O(n),空间复杂度是O(n)。如果您对Rust编程语言感兴趣,可以尝试使用它来实现其他算法和数据结构。
最后
玩到极致,便是艺术。
加油。