递归函数定义如下:
function factrec($x) {
if($x <= 1) {
return $x;
} else {
return $x * factrec($x - 1);
}
}
在这里迭代:
function factiter($x) {
$y = $x;
while($y > 1) {
$x *= ($y - 1);
$y--;
}
return $x;
}
我已经读过,在递归函数中,正文是O(1),递归调用O(n-1)使其成为O(n),但对于迭代,它是否也是O(n)?
答案 0 :(得分:8)
是的,两个版本都在O(n)时间内运行。迭代版本的推理与递归版本的推理基本相同:循环体在O(1)时间内运行并执行n次。
但是应该注意,迭代版本在O(1)空间中运行,而递归版本使用O(n)堆栈空间(因为递归深度为n)。
答案 1 :(得分:0)
x
值时,处理器将运行多少个操作。对于较大的值,它不会变得更复杂,并且它以线性方式始终是相同的操作。