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

    斐波那契数列,即兔子问题;算法笔试题可能会出现;

    function fun($n){
        if($n==1||$n==2){
            return 1;
        }
    return fun($n-1) + fun($n-2); }

    性能问题: 1,自身嵌套太深,可能会引起堆栈溢出; 

          堆栈溢出:函数调用会使用栈来保存临时变量。每调用一个函数,都会将临时变量封装为栈帧压入内存栈,等函数执行完成返回时,才出栈。系统栈或者虚拟机栈空间一般都不大。如果递归求解的数据规模很大,调用层次很深,一直压入栈,就会有堆栈溢出的风险。

          2,重复计算,拖慢计算速度;

    优化方面:

    1,递归方式的优化:

    $a = 1;
    $b = 1;
    function fun($a, $b, $n){
        if($n > 2){
            return fun($a+$b, $a, $n-1);
        }
    
        return $a;
    }

    2,非递归方式:

    function fun($n){
        if($n==1||$n==2){
            return 1;
        }
    
        $a = $b = 1;
        for($i=2; $i<$n; $i++){
            $temp = $b;
            $b += $a;
            $a = $temp;
        }
    
        return $b;
    }

    测试 n = 20 的时候的结果:

    // 递归未优化
    值:6765
    执行时间:0.00088596343994141
    递归次数:13529
    
    // 递归优化
    值:6765
    执行时间:4.0531158447266E-6
    递归次数:19
    
    // 非递归
    值:6765
    执行时间:3.0994415283203E-6
    递归次数:1

    综上所述,性能方面:  非递归 > 优化的递归 > 未优化后的递归 

  • 相关阅读:
    Mac OS 下包管理器 homebrew的安装
    草根程序员八年百万年薪之路
    div隐藏滚动条,仍可滚动
    感觉身体被掏空by彩虹室内合唱团
    添加bash命令
    mysql性能优化
    PHP变量存储结构
    轻量级MVC框架(自行开发)
    一致性hash算法之php实现
    redis安装
  • 原文地址:https://www.cnblogs.com/pyspang/p/13781955.html
Copyright © 2011-2022 走看看