递归算法的运行时间作为递归

时间:2018-10-13 09:33:44

标签: algorithm recursion runtime recurrence

我遇到一个问题,询问以下递归算法的运行时间是什么。

  int F(int A[ ],int N) {

    if(N==1)

    return 1 ;
    return F(A,N-1)+1
}

答案是O(N),但我只是不知道如何证明这一点。

2 个答案:

答案 0 :(得分:2)

您需要计算该函数进行的递归调用的次数,以及在每个递归调用下进行的操作数。

因此,每次调用该函数时,都会有1个if调用和1个return调用。

递归调用的格式为F(A,N-1),因此每个调用中N都会递减1,并且您的基本情况是N = 1,即到达1时将不再有递归调用。

从直观上看,很明显有N个递归调用,并且由于每个调用都在恒定的时间内进行操作(因此可以忽略不计),因此总运行时间为O(N)

我希望能这样解释。

答案 1 :(得分:1)

您可以通过递归时间方程获取运行时间:

T(n) = T(n-1) + 1

然后展开递归:

T(n) = (T(n-2) + 1) + 1 = T(n-2) + 2 = (T(n-3) + 1) + 2 = T(n-3) + 3 =
... = T(1) + n - 1 = n = \Theta(n) = O(n)