这是我作业的一个问题。我不太清楚如何解决这样的问题。
If T(n) = nT(n - 1) and T(1) = 3, then
a) T(n) = O(n^n)
b) T(n) = Ω(n!)
c) T(n) = O(2^(nlogn))
d) none of the above
我不需要这个问题的确切答案(因为它的功课),但我想知道如何告诉递归函数的界限。
答案 0 :(得分:6)
尝试解决它。假设n = 3
。会有多少次迭代?如果n = 4
怎么样?当您增加n
时,迭代次数会增加多快?
另一种看待它的方法是:在公式中,函数如何“分支”?线性函数不分支,它们只有简单的1:1递归。指数函数将分支多次。对数函数分支,但降低了它们运行的数据的复杂性......等等。
答案 1 :(得分:3)
For n = 4:
T(4) = 4 * T(4-1)
T(3) = 3 * T(3-1)
T(2) = 2 * T(2-1)
T(1) = 3
每次调用的执行时间为2步(乘法和 递归调用)。对于给定的示例,对于4个呼叫,您将有8个步骤 线性执行(你没有任何组合或对数 算法,所以你的函数受O(n)限制。
对于可能的选择,你得到的答案是:
a) T(4) = O(4^4) -> 256
b) T(4) = Ω(4!) -> 24
c) T(4) = O(2^(4log4)) ~> 5.27
d) none of the above
所以你的选择应该是d。希望它有所帮助。