阶乘算法和斐波那契数组

版权声明:转发原创文章请复制文章链接地址 https://blog.csdn.net/weixin_42579642/article/details/85760578

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

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

猜你喜欢

转载自blog.csdn.net/weixin_42579642/article/details/85760578
今日推荐