研究算法,写了一些网上没有的算法,大家看看有没有错误!
/**
* @param $n
* @return int
* 阶乘(非递归)
*/
function factorial($n){
$res = 1;
for($i=1;$i<=$n;$i++){
$res *= $i;
}
return $res;
}
/**
* @param $n
* @param int $num
* @return float|int
* 正向阶乘(递归)
*/
function factorial2($n,$num = 1){
$res = 1;
if($n>$num){
$num++;
$res *= $num;
$res = factorial2($n,$num)*$res;
}
return $res;
}
/**
* @param $n
* @return float|int
* 反向阶乘(递归)
*/
function factorial3($n){
$res = $n;
if($n>1){
$n--;
$res *= factorial2($n);
}
return $res;
}
/**
* @param $n
* @return float|int
* 反向阶乘(递归)
*/
function factorial4($n){
if($n == 1){
return 1;
}
return $n*factorial2($n-1);
}
/**
* @param $num
* @return array
* 斐波那契(非递归)
*/
function fibonacci($num){
$arr = [1,1];
if($num == 1){
return [1];
}
if($num == 2){
return $arr;
}
if($num>=3){
for($i=2;$i<$num;$i++){
$arr[$i] = $arr[$i-1]+$arr[$i-2];
}
}
return $arr;
}
/**
* @param $num
* @param int $key
* @param array $arr
* @return array
* 斐波那契(递归)
*/
function fibonacci2($num,$key = 2,$arr = [1,1]){
if($num == 1){
return [1];
}
if($num == 2){
return $arr;
}
if($num>=3){
$arr[$key] = $arr[$key-1]+$arr[$key-2];
$key++;
if($key<$num){
$arr = fibonacci2($num,$key,$arr);
}
}
return $arr;
}
/**
* @param $num
* @return array
* 斐波那契(递归)
*/
function fibonacci3($num){
$arr = [1,1];
if($num == 1){
return [1];
}
if($num == 2){
return $arr;
}
$tmparr = fibonacci3($num-1);
$tmparr[] = $tmparr[$num-2]+$tmparr[$num-3];
return $tmparr;
}