通过对斐波那契数列和阶乘把递归转循环(是不是所有递归都可以转为循环?)
/*斐波那契数列*/
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;
}