今天在课堂上,我的老师在黑板上写下了这个递归阶乘算法:
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
。
之后,她代j
入T(n-j) + j
,得到T(1) + n-1
。
她直接说对于那个 n-1 = 2 (log 2 n-1),所以算法的代价是指数级的。
我真的失去了最后两步。有人可以向我解释一下吗?