通过小案例简单理解递归算法

一:用递归算法打印99乘法表

 1 <?php
 2 header(‘Content-Type:text/html; charset=utf-8‘);
 3 echo "<h2>用递归算法打印99乘法表</h2>";
 4 function cf99($num=9){
 5     for($i=1; $i<=$num; ++$i){
 6         echo "$i*$num=".$i*$num."&nbsp;&nbsp;&nbsp;&nbsp;";
 7     }
 8     echo "<br/>";
 9     $num++;             //递归点:什么时候再次调用当前函数
10     if($num <= 9){      //递归出口:什么时候不再调用当前函数
11         cf99($num);
12     }
13 }
14 cf99(1);

二:斐波那契数列

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
从第二项开始每一项都等于前两项的和,注意项是从0开始的

 1 <?php
 2 header(‘Content-Type:text/html; charset=utf-8‘);
 3 function f($n){
 4     if($n == 0){
 5         return 0;
 6     }elseif($n == 1){
 7         return 1;
 8     }
 9     return f($n-1) + f($n-2);
10 }
11 echo f(0);

三:利用递归对数组进行快速排序

 1 <?php
 2 header(‘Content-Type:text/html; charset=utf-8‘);
 3 $array = array(12,9,4,18,7,2,38,34,8,3,41);
 4 //递归点:什么时候继续调用当前方法
 5 //递归出口:什么时候停止调用当前方法
 6 function quickSort($arr){
 7     //递归出口
 8     $len = count($arr);
 9     if($len <= 1){
10         return $arr;
11     }
12     //分割两个数组,创建两个空数组分别放分割出来大的和小的数
13     $big = $small = array();
14     //从数组中取出第一个元素作为参考值
15     $tag = $arr[0];
16     //循环完数组大的放入$big,小的放入$small
17     for($i=1; $i<$len; $i++){  //注意$i等于1,因为从第二个数开始和设定的第一个比较
18         if($arr[$i] > $tag){
19             $big[] = $arr[$i];
20         }else{
21             $small[] = $arr[$i];
22         }
23     }
24     //递归点,分割到最后一个就接受返回值
25     $big_sort = quickSort($big);
26     $small_sort = quickSort($small);
27     //再进行合并
28     return array_merge($small_sort,array($tag),$big_sort);
29 }
30 $result = quickSort($array);
31 var_dump($result);

时间: 2024-08-26 12:52:30

通过小案例简单理解递归算法的相关文章

Session小案例-----简单购物车的使用

Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示同样用的都是servlet. 功能实现如下: 1,显示网站的所有商品 2,用户点击购买后,能够记住用户选择的商品 3,实现了多个会话共享一个session 4, 实现了浏览器禁用cookie后数据共享问题的处理 首页: package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.io

几个数据库的小案例(二):极其简单的省市联动

总用有两个文件(frmMain.cs SqlHelper.cs) //frmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 省市联动

MySQL主从同步的简单理解

MySQL主从同步的简单理解 许多大型网站为了减轻海量用户对于服务器并发访问量的性能问题,会使用很多解决的方案, 数据库主从分离,就是目前主流的一种解决手段. 想一下每个用户都通过控制层业务层调用服务器数据,用户量小还好说, 用户量大的话轻则用户体验极差,重则数据库崩溃甚至数据丢失,那真的就是很严重的事情了. 如何解决,解决方案之一就是主从分离. 主从那长话短说就是,一台服务器我处理不了就用几台服务器咯, 但是这些服务器是有主次之分以及职责划分的. * 将我们对数据库的读写操作分别放到不同的服务

小案例之随机点名系统

随机点名系统 近日,本人学习了对象和计时器,就想写一个小案例随机点名系统,这个小案例其实很简单只需要生成随机下标,从数组中取值并运用innerHTML方法将获取到的信息显示到网页上(这里有人会提出疑问,字符串也可以遍历为什么不用字符串呢?原因很简单字符串无法分隔每个名字.)话不多说直接上代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></ti

php类的封装、继承和多态的简单理解

.面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象: 我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象 一.封装性  封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作.  php提供了三种访问控制修饰符  public 表示全局,本类内部,类外部,子类都可以访问  protected 表示受保护的,只有本类或子类可以访问  pr

Thinkphp 生成订单号小案例

Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性 3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程

简单理解计算机通信

简单理解计算机通信 写在前面: 在计算机刚出现的时候,只能在本机进行一些运算处理,想将一台计算机中的数据转移到另一台计算机中,需要通过外部存储介质来传输,例如磁带.软盘.而网络技术的出现,使得计算机间可以通过一些传输介质(网线.光纤等),实现快速的数据传输和信息交互.如今,网络已无处不在,那么,计算机之间究竟是如何通信的呢?下面会通过一些基础的网络知识来简单理解计算机之间的通信过程. 网络通信模型: 网络通信模型是一种概念模型和框架,旨在使各种计算机在世界范围内互连为网络.其中有OSI七层模型和

对象序列化原因的简单理解

序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,其最终目的都是将内存中的对象持久化或者是在网络上传输.反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 使用序列化的原因 a. 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本.我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可

[干货分享]git的简单理解及基础操作命令

前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制>这本书(偏理论,内容完善,很不错),针对所学内容建了git仓库测试,且写了不少git操作命令的笔记,做个分享,有错误的地方各位大大也给提出,好做修改~ Git是一款免费.开源的.用Linux内核开发的分布式版本控制系统. git和svn有什么区别呢? git采用分布式版本库管理,而svn采用集中式版本库管理. 集中式版本库管理需要有一台存放版本库的服务器,