zoukankan      html  css  js  c++  java
  • Rust斐波拉契数列

    斐波那契数列(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);
    }
    

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

  • 相关阅读:
    进程提权小结
    进程工作集WorkingSet (PSAPI 01)
    GetSystemInfo 和 GlobalMemoryStatus获取系统信息,内存信息
    C++11智能指针 share_ptr,unique_ptr,weak_ptr用法
    结构体及类对象的内存对齐
    菱形继承问题和虚继承
    TLS反调试
    获取程序目录,模块路径
    docker install for centos7
    docker镜像与容器概念
  • 原文地址:https://www.cnblogs.com/qisong/p/14513044.html
Copyright © 2011-2022 走看看