ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Rust斐波拉契数列

2021-03-10 17:35:41  阅读:249  来源: 互联网

标签:return 数列 num2 波拉 bench fib Rust fn


斐波那契数列(Fibonacci sequence),又称黄金分割数列,
因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”
指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
这个数列从第3项开始,每一项都等于前两项之和
第一种方式,递归算法

//递归方法
fn fib_1(n: i32) -> i32 {
    profile_fn!(fib_1);
    match n {
        0 => return 0,
        1 => return 1,
        _ => return fib_1(n - 1) + fib_1(n - 2),
    };
}

这里借助一个性能测试工具,来看看程序实际的运行耗时,工具地址firestorm
引用方式

[dependencies]
firestorm = { version="0.4", features=["enable_system_time"] }

方法调用,求第20位

use firestorm::{bench, profile_fn};

fn main() {
    bench("./", test).unwrap();
}

fn test() {
    fib_1(20);
}

性能测试结果如下,因为递归算法中存在着大量重复计算步骤,所以非常慢

第二种方式,每一次计算都保存计算的结果,以空间换时间,优化计算速度

//循环 以空间换时间
fn fib_2(n: i32) -> i32 {
    profile_fn!(fib_2);

    if n == 0 {
        return 0;
    };
    let mut num1 = 0;
    let mut num2 = 1;
    for _ in 1..n {
        let tmp = num1 + num2;
        num1 = num2;
        num2 = tmp;
    }
    return num2;
}

同样的调用方式

use firestorm::{bench, profile_fn};

fn main() {
    bench("./", test).unwrap();
}

fn test() {
    fib_2(20);
}

性能测试结果如下,速度变快了不少

标签:return,数列,num2,波拉,bench,fib,Rust,fn
来源: https://www.cnblogs.com/qisong/p/14513044.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有