階乘演算法和斐波那契陣列
阿新 • • 發佈:2019-01-08
研究演算法,寫了一些網上沒有的演算法,大家看看有沒有錯誤!
/** * @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; }