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

一、总结

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

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

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

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

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

三、代码

代码一

 <?php

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

代码二

 <?php
namespace app\index\controller; use app\index\controller\Base; class Exercise extends Base
{
public function index()
{
$this->FibonacciDemo();
} //斐波那契数列
private $arr = array();//记忆化递归数组
public function Fibonacci($n)
{
global $arr;
if($n==0) return 0;
else if($n==1||$n==2) return 1; //1、php中的逻辑连接符:和java一样,例如|表示位运算符,||表示逻辑运算符
else{
$arr[$n-1]=$arr[$n-1]!=-1?$arr[$n-1]:$this->Fibonacci($n-1);
$arr[$n-2]=$arr[$n-2]!=-1?$arr[$n-2]:$this->Fibonacci($n-2);
return $arr[$n]=$arr[$n-1]+$arr[$n-2]; //2、支持这样的返回方式,这应该是先赋值再返回 3、把求出的值给记录下数组,刚刚忘记记录$arr[$n]了
}
}
public function FibonacciDemo(){
global $arr;
for ($i=0; $i <100 ; $i++) {
$arr[$i]=-1;
}
$arr[0]=0;
$arr[1]=1;
$arr[2]=1;
echo($this->Fibonacci(50));
dump($arr);die;
} }

截图:

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

  1. 16位masm汇编实现记忆化递归搜索斐波那契数列第50项

    .model small ;递归fib,使用压缩BCD码,小端派 .data y1 byte 6 dup(0) y2 byte 6 dup(0) vis byte 1,1,1,61 dup(0) ;便 ...

  2. Python递归及斐波那契数列

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...

  3. 【递归】斐波那契数列第n个数

    递归.递推计算斐波那契数列第n项的值: #include <stdio.h> long long fact(int n); //[递推]计算波那契数列第n个数 long long fact ...

  4. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...

  5. python递归与非递归实现斐波那契数列

    1.题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 递归实现: class Solution(): def Fibnacci(self ...

  6. 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)

    动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...

  7. C++用递归实现斐波那契数列

    [题目描述] 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和. 给出一个正整数a,要求菲波那契数列中第a个数是多少. [输入] 第1行是测试数据的组数n, ...

  8. python_递归_斐波那契

    什么是递归算法? -- 函数自己调用自己本身 -- 本质上return返回的时候,总是把一个参数传入到自己函数本身,让函数反复调用下去 递归有何特点? -- 必有一个结束条件 没有结束条件,递归就没有 ...

  9. 剑指offer编程题Java实现——面试题9斐波那契数列

    题目:写一个函数,输入n,求斐波那契数列的第n项. package Solution; /** * 剑指offer面试题9:斐波那契数列 * 题目:写一个函数,输入n,求斐波那契数列的第n项. * 0 ...

随机推荐

  1. linux的vi或vim文件时,怎样消除刚才查找字符串的高亮?

    有时候,自己在通过/查找字符串时,会出现: 但是呢,当你保存,再次进入还是会出现这么花的高亮显示,很令人苦恼. 解决办法 随便,输入没有的字符串,即可解决. 如下 /sssssssssssssssss ...

  2. vue组件中 IS 用法

    //html <link rel="stylesheet" href="http://www.jq22.com/demo/animate-141106223642/ ...

  3. mount 命令

    命令格式:mount [-t vfstype] [-o options] device dir 嵌入式设备挂载命令mount -o nolock -t nfs 192.168.1.24:/home/t ...

  4. Java:异常体系

    异常的类别:可处理异常,运行时异常,非运行时异常 子类重写父类方法,父类方法有异常抛出, 子类重写父类的方法? 不能比父类抛出更大的异常 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?ca ...

  5. HDU 4699 Editor 维护栈

    维护两个栈,分别存光标前和光标后的数 再维护前缀和的栈 和 前缀和最大值的栈 注意一下左移,右移,删除到顶了就不操作了 5个操作 I x : 光标处插入x  -----> s1.push(x) ...

  6. Android经常使用自己定义控件(二)

           经常使用的Android自己定义控件分享 http://www.see-source.com//androidwidget/list.html?type=&p=1

  7. shell date 命令说明

    shell date 命令说明 使用方法:date [选项]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 以给定的格式 ...

  8. spring基础内容

      关注和收藏在这里   深入理解Spring框架的作用 纵览Spring , 读者会发现Spring 可以做非常多的事情. 但归根结底, 支撑Spring的仅仅是少许的基本理念, 所有的理念都可以追 ...

  9. MySQL 使用mysqld_multi部署单机多实例详细过程

    ,如何使用多实例 由于多实例中,各个实例的资源都是不share的,所以要合理分配好各个实例的内存.磁盘等资源,避免out of memery或则 full disk的情况出现.

  10. get_browser()用法

    get_browser()用法 get_browser()函数是用来分析USER_AGENT的,它的执行方法是自动获取客户端的USER_AGENT,然后调用browscap.ini库进行分析得到结果 ...