使用Rust递归实现斐波那契数列
程序员文章站
2024-03-19 19:26:16
...
使用Rust递归实现斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
以上摘自百度百科:斐波那契数列
实现
对于正整数n,斐波那契数列F(n),根据斐波那契数列的递归定义:
- 当n=1或n=2时F(n)=1
- F(n)=F(n-1)+F(n-2)
定义如下函数:
fn fib(num: u32) -> u32 {
if num == 1 || num == 2 {
1
} else {
fib(num - 1) + fib(num - 2)
}
}
这是一个返回值为u32类型的函数。
添加到主函数中,打印斐波那契数列的前30个数。
fn main() {
println!("<<< Fibonacci Sequence >>>");
let mut n: u32 = 0;
loop {
n += 1;
if n > 30 {
break;
} else {
println!("{}: {}", n, fib(n));
}
}
}
编译运行,这时候的效果如下图:
程序没有问题,可以达到预期功能,但为了美观,我们可以对返回值进行格式化输出:
fn main() {
println!("<<< Fibonacci Sequence >>>");
let mut n: u32 = 0;
loop {
n += 1;
if n > 30 {
break;
} else {
print!("{:>2}: {:<20}", n, fib(n));
}
if n % 3 == 0 {
print!("\n");
}
}
}
编译运行,效果如下图,大功告成。
完整代码:
fn fib(num: u32) -> u32 {
if num == 1 || num == 2 {
1
} else {
fib(num - 1) + fib(num - 2)
}
}
fn main() {
println!("<<< Fibonacci Sequence >>>");
let mut n: u32 = 0;
loop {
n += 1;
if n > 30 {
break;
} else {
print!("{:>2}: {:<20}", n, fib(n));
}
if n % 3 == 0 {
print!("\n");
}
}
}