通过对斐波那契数列和阶乘把递归转循环(是不是所有递归都可以转为循环?)

/*斐波那契数列*/
static function getN($n)
{
        if ($n<=0) return 0;
        if ($n<=2) return 1;
        /*递归法*/
        return static::getN($n-1) + static::getN($n-2);

        /*循环法*/
        $a1 = 1; $a2 = 1; $a3 = 2;
        for ($i=3;$i<=$n;$i++){
            $a3 = $a1 + $a2;
            $a1 = $a2;
            $a2 = $a3;
        }
        return $a3;
}

/*阶乘*/
static function squre($n)
{
        if ($n<=1) return 1;/*递归法*/
        return $n * static::squre($n-1);

        /*循环法*/
        $int = 1; $res = 1;
        for ($i=2;$i<=$n;$i++){
            $res = $i * $int;
            $int = $res;
        }
        return $res;
}

作者 baiwangea

发表评论

您的电子邮箱地址不会被公开。