递推算法(斐波那契数列)
Code
<?php
// 斐波那契数列
// 公式:F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
// 函数实现,递推思想
function fibonacci($des){
// $des,表示输出f[n]
// 从第三个数开始,当是f[1]或者f[2]时,程序直接返回1
if($des ==1 || $des==2){
return 1;
}
// 定义f[1]和f[2]
$f[1] = 1;
$f[2] = 1;
for($i=3;$i<=$des;$i++){
$f[$i] = $f[$i-1] + $f[$i-2];
}
return $f[$des];
}
// 测试,f[1]和f[15]返回的结果
echo fibonacci(1),'<hr/>';
echo fibonacci(15);
?>
运行结果
递归算法(斐波那契数列,Fibonacci)
Code
<?php
// 递归思想
function fibonacci($n){
// 递归出口:可以理解为循环执行条件 -> 满足条件,循环结束
if($n == 1 || $n == 2){
return 1;
}
// 递归点:可以理解为循体
return fibonacci($n-1)+fibonacci($n-2);
}
// 测试
echo fibonacci(15),'<hr/>';
echo fibonacci(20);
?>
运行结果
冒泡算法(Bubble Sort)
Code
<?php
// 冒泡排序(Bubble Sort)
// 一组数组
$arr = array(1,222,33,444,55,666,7);
// 二次比较,循环比较所有数字
for($i=0,$len=count($arr);$i<$len;$i++){
// 一次比较,选出最大的数字
for($j=0;$j<$len-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
var_dump($arr);
?>
运行结果
选择排序(Selection Sort)
Code
// 选择排序,优于冒泡排序
$arr = array(1,3,2,44,4,21,312321,-12);
// 1、确定比较次数
for($i=0,$len=count($arr);$i<$len;$i++){
// 2、$min变量记录最小的数字的下标
$min = $i;
// 3、多次比较,通过某次比较选出最小的数字的下标
for($j=$i+1;$j<$len;$j++){
if($arr[$j]<$arr[$min]){
// 4、更换数组下标
$min = $j;
}
}
// 5、切换位置
if($min != $i){
$temp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $temp;
}
}
var_dump($arr);
运行结果
插入排序(Insert Sort)
Code
<?php
// 对于少量元素的排序,它是一个有效的算法
// 需要排序的数组
$arr = array(2,5,1,0,6,8,-89);
// 确定需要排列的次数
for($i=1,$len=count($arr);$i<$len;$i++){
// 取出当前的数字
$temp = $arr[$i];
$change = false;
// 比较,当前面的数字比后面的数字大的时候,交换位置
for($j=$i-1;$j>=0;$j--){
if($arr[$j] > $temp){
$arr[$j+1] = $arr[$j];
$change = true;
//$arr[$j] = $temp;
}else{
// 如果正常的话,就break
break;
}
}
// 优化:只交换一次
if($change){
$arr[$j+1] = $temp;
}
}
print_r($arr);
?>
运行结果