5.4 递归算法
若一个算法通过把问题归约到带更小输入的相同问题的实例来解决原来的问题,则这个算法称为递归的。
简单来所就是,将输入减小,比如下面这个阶乘的例子,求n!
的值:
function factorial($n){
if ($n==1){
return 1;
}
return $n*factorial($n-1);
}
在上面的函数中,同一个函数,输入不断减小。
实操:归并排序
先说什么是归并排序,就是先将数组拆分成更小的数组,然后真对这些小数组进行排序,排序后组合成已经排好序的数组。
示意图
源代码
<?php
function mergeSort($line){
if (count($line)<=1){
return $line;
}
$middle=ceil(count($line)/2);
return sortFunction(
mergeSort(array_slice($line,0,$middle)),
mergeSort(array_slice($line,$middle))
);
}
function sortFunction($array1,$array2){
// todo 这里重点不是排序函数,所以就不在这里费心思了
$newArray=array_merge($array1,$array2);
sort($newArray);
return $newArray;
}
$line=[8,2,4,6,9,7,10,1,5,3];
print_r(mergeSort($line));
输出结果