阶乘算法和斐波那契数组

研究算法,写了一些网上没有的算法,大家看看有没有错误! 

/**
 * @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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值