PHP-斐波那契数列-递归-迭代

斐波那契数列 :
1 1 2 3 5 8 13 21 。。。
规律:从第三个数开始,值为前两个数值的和:An=A(n-1)+A(n-2)
迭代方法:

/*
$n1:数列的第一个值;
$n2:数列的第二个值;
$n:要求得的第N个值;
*/
function Fibonacci($n1,$n2,$n){
    for($i=0;$i<$n;$i++){
        $tmp = $n1+$n2;
        $n1 = $n2;
        $n2 = $tmp;
    }
    return $tmp;//得到的是第n+2个位置的值。
}
echo Fibonacci(1,1,5);

递归方法:

function Fibonacci($n1,$n2,$n){
    if($n<=2){
        return $n2;
    }else{
        return Fibonacci($n2,$n1+$n2,$n-1);
    }
}
//echo Fibonacci(1,1,5);

递归2:

function Fibonacci($n){
    if($n<=2){
        return 1;   
    }else{
        return Fibonacci($n-1)+Fibonacci($n-2);
    }
}
//echo Fibonacci(1,1,5);

JS实现斐波那契数列:

function Fibonacci(n){
    var a=0,b=1,arr=[0,1];
    while(arr.length<n){
        [a,b]=[b,a+b];
        arr.push(b);
    }
    return arr;
}
Fibonacci(10);

递归流程:
1:找到递归的终止条件,
2:在终止条件下的输出(即简单场景的处理方法)
3:改变参数调用递归(提取反复逻辑,缩小规模)
递归改为迭代:
1:建立自己的堆栈代替系统栈,用来保存内容,
2:将递归调用改为循环调用。
以阶乘为例:n! = n(n-1)(n-2)。。。2*1
阶乘递归:

function Factorial($n){
    if($n==1){
        return 1;
    }else{
        return $n*Factorial($n-1);
    }
}
echo Factorial(3);

改为迭代:

function Factorial($n){
    $tmp = 1;
    for($i=1;$i<=$n;$i++){
        $tmp*=$i;
    }
    return $tmp;
}
echo Factorial(5);

猜你喜欢

转载自blog.csdn.net/qq_36211859/article/details/82382456
今日推荐