zoukankan      html  css  js  c++  java
  • php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    一、总结

    1、递归不优化的话,30层开外就有点吃力了

    2、php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是php自动选择,这就会有下面的情况:

    当int不够的时候自动转化为float,float不够的时候自动转化为科学计数法

    二、php实现记忆化递归--以斐波那契数列为例

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

    三、代码

    代码一

     1 <?php
     2 
     3 $arr = array(0,1,1);
     4 for($i=3;$i<=100;$i++){$arr[$i]=-1;}
     5 function Fibonacci($n)
     6 {
     7     global $arr;
     8     if($arr[$n]!=-1) return $arr[$n]; //1、边界情况都可以结合 记忆化递归数组判断,对比一下下面的代码就知道简便之处了
     9     else{
    10         $arr[$n-1]=$arr[$n-1]!=-1?$arr[$n-1]:Fibonacci($n-1);
    11         $arr[$n-2]=$arr[$n-2]!=-1?$arr[$n-2]:Fibonacci($n-2);
    12         return $arr[$n]=$arr[$n-1]+$arr[$n-2];
    13     }
    14 }

    代码二

     1 <?php
     2 namespace appindexcontroller;
     3 
     4 use appindexcontrollerBase;
     5 
     6 class Exercise extends Base
     7 {
     8     public function index()
     9     {
    10         $this->FibonacciDemo();
    11     }
    12 
    13     //斐波那契数列 
    14     private $arr = array();//记忆化递归数组
    15     public function Fibonacci($n)
    16     {
    17         global $arr;
    18         if($n==0) return 0;
    19         else if($n==1||$n==2) return 1; //1、php中的逻辑连接符:和java一样,例如|表示位运算符,||表示逻辑运算符
    20         else{
    21             $arr[$n-1]=$arr[$n-1]!=-1?$arr[$n-1]:$this->Fibonacci($n-1);
    22             $arr[$n-2]=$arr[$n-2]!=-1?$arr[$n-2]:$this->Fibonacci($n-2);
    23             return $arr[$n]=$arr[$n-1]+$arr[$n-2]; //2、支持这样的返回方式,这应该是先赋值再返回  3、把求出的值给记录下数组,刚刚忘记记录$arr[$n]了
    24         }
    25     }
    26     public function FibonacciDemo(){
    27         global $arr;
    28         for ($i=0; $i <100 ; $i++) { 
    29             $arr[$i]=-1;
    30         }
    31         $arr[0]=0;
    32         $arr[1]=1;
    33         $arr[2]=1;
    34         echo($this->Fibonacci(50));
    35         dump($arr);die;
    36     }
    37 
    38 }

    截图:

  • 相关阅读:
    如何用命令将本地项目上传到github
    Mysql基本命令一
    Mysql基本命令二
    PDO操作数据库
    PHP分页
    JQuery中$.ajax()方法参数详解
    基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
    IE浏览器兼容问题
    购物车的实现方式
    JS学习之路
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9035402.html
Copyright © 2011-2022 走看看