如何计算此递归算法的时间复杂度

时间:2014-09-20 03:34:21

标签: algorithm time-complexity

如何计算以下代码的时间复杂度?假设m接近n。我得到的是f(n)= 2 * f(n-1)。所以时间复杂度是f(n)= O(2 ^ n)。我是对的吗?

int uniquePaths(int m, int n) {
    if (m < 1 || n < 1) return 0;
    if (m == 1 && n == 1) return 1;
    return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}

1 个答案:

答案 0 :(得分:2)

接下来会有一些挥手,但我认为这基本上是正确的。

调用树中的每个叶子将对总结果贡献1,因此叶子的数量是uniquePaths(m,n)。由于uniquePaths(m,n)==&#34; m + n-2选择n-1&#34;,当m和n相似时,算法的执行时间大致为中心二项式系数&#34; 2n选择n&#34;,它在O(4 ^ n)。