任何人都可以帮助理解复发关系吗?

时间:2014-02-12 19:45:01

标签: time-complexity recurrence

我正在学习时间复杂性并具备此功能:

public static double pow( double x, int n ) {
    if( n==0 ) return 1.0;
    return x*pow(x,n-1); 
}

我的任务是找到它的时间复杂度的递归关系,我知道答案是T(n)= T(n-1)+ O(1),我不知道理解,因为我认为它应该是T(n)= T(n-1)+ O(n)。我的理由是我将每个递归调用乘以x,这发生了n次,因此O(n)正确?

*编辑:我想我明白自己的错误。 T(n)= T(n-1)+ O(1)仅用于该特定调用,因此显然为O(1)并且求解递归导致n * T(n-1)+(n-1)O (1)所以忽略(n-1)O(1),因为它小于n * T(n-1)。所以我们得到增长的顺序= O(n)。

1 个答案:

答案 0 :(得分:0)

您无需考虑每次乘法。递归关系是关于一个号码的呼叫如何与不同号码的相同呼叫相关。在这种情况下,计算pow(x,n)要求您已经知道pow(x,n-1) - 这是T(n) = T(n-1)部分。现在,鉴于您已经拥有pow(x,n),您还需要做些什么来计算pow(x,n-1)?这只是一次乘法 - x*pow(x,n-1) - 即O(1),因此总递归关系为T(n) = T(n-1) + O(1)。所有其他乘法都已计入T(n-1) ...