今天在课堂上,我的老师在黑板上写下了这个递归阶乘算法:
int factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
她说它的成本为
T(n-1) + 1
。然后用迭代法,她说
T(n-1) = T(n-2) + 2 = T(n-3) + 3 ... T(n-j) + j
,所以当n - j = 1
时算法停止,因此j = n - 1
。之后,她在
T(n-j) + j
中替换了j
,得到T(1) + n-1
。她直接说对于
n-1=2^(log2(n-1))
,因此算法的成本是指数级的。我真的不明白最后两步。有人能解释一下吗?