php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
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实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)的更多相关文章
- 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) ;便 ...
- Python递归及斐波那契数列
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...
- 【递归】斐波那契数列第n个数
递归.递推计算斐波那契数列第n项的值: #include <stdio.h> long long fact(int n); //[递推]计算波那契数列第n个数 long long fact ...
- Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器
一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...
- python递归与非递归实现斐波那契数列
1.题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 递归实现: class Solution(): def Fibnacci(self ...
- 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)
动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...
- C++用递归实现斐波那契数列
[题目描述] 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和. 给出一个正整数a,要求菲波那契数列中第a个数是多少. [输入] 第1行是测试数据的组数n, ...
- python_递归_斐波那契
什么是递归算法? -- 函数自己调用自己本身 -- 本质上return返回的时候,总是把一个参数传入到自己函数本身,让函数反复调用下去 递归有何特点? -- 必有一个结束条件 没有结束条件,递归就没有 ...
- 剑指offer编程题Java实现——面试题9斐波那契数列
题目:写一个函数,输入n,求斐波那契数列的第n项. package Solution; /** * 剑指offer面试题9:斐波那契数列 * 题目:写一个函数,输入n,求斐波那契数列的第n项. * 0 ...
随机推荐
- solr简介
Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包 ...
- js中Object.defineProperties 定义一个在原对象可读可写的方法
function A(){ this.name = 'hellow word'; } Object.defineProperties( A.prototype,{ doSomething2 : { v ...
- mysql允许外部连接设置
错误信息: SQL Error (1130): Host ‘192.168.1.88’ is not allowed to connect to this MySQL server 说明所连接的用户帐 ...
- mysql 批量删除数据
批量删除2000w数据 使用delete from table太慢 //DELIMITER DROP PROCEDURE if EXISTS deleteManyTable; create PROCE ...
- 洛谷P3273 [SCOI2011]棘手的操作
题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第y个节点A1 x v: 将第x个节点的权 ...
- 微信小程序仿微信运动步数排行-交互
效果图如下: 图片.png wxml: <view class="item-box"> <view class="items"> < ...
- 数据库SQL Server2012笔记(七)——java 程序操作sql server
1.crud(增删改查)介绍:create/retrieve/update/delete 2.JDBC介绍 1)JDBC(java database connectivity,java数据库连接) 2 ...
- PHP盛宴——经常使用函数集锦
近期写了蛮多PHP,也接触到挺多经常使用的函数,大多都记了笔记,发个博客出来.共同学习.事实上感觉学习一门语言,语法逻辑是软素养.而对语言的熟悉程度仅仅能随着使用时间的增长而慢慢增长,当对一门语言的函 ...
- 感谢党,软考过了。系统集成项目管理project师
人品爆发了,刚用干巴巴的日语做完2小时的设计说明,回到家一查,人品爆发了.软考竟然过了. 绝对是评卷老师给人品啊!真想请他吃顿饭. 系统集成项目管理project师 64 53 幸运飞过! 今天真是 ...
- Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
Android 6.0 要单独的获取权限 这里提供两种很简单的方法 EasyPermition RxPermition EasyPermition https://github.com/googles ...