【发布时间】:2013-04-28 16:37:19
【问题描述】:
今天在课堂上,我的老师在黑板上写下了这个递归阶乘算法:
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(log2n-1),所以算法的代价是指数级的。
最后两步我真的输了。有人可以向我解释一下吗?
【问题讨论】:
-
我想分享一个可以使用的旧线程。 Link_TO_Thread
-
上面写的函数进入了factorial(0)的无限循环。
标签: complexity-theory big-o factorial