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);
    }
    

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

  • 相关阅读:
    Mongodb 利用mongoshell进行数据类型转换
    利用Cordova开发移动应用程序
    mongodb Capped Collections 固定集合
    ubuntu desktop使用中遇到的问题
    php session 锁机制和基本安全设置
    mongodb update
    mongodb query
    mongodb Insert 、 remove 、操作原子性(atomicity)
    mongodb index(索引)
    mongodb笔记 getting started
  • 原文地址:https://www.cnblogs.com/qisong/p/14513044.html
Copyright © 2011-2022 走看看