我遇到一个问题,询问以下递归算法的运行时间是什么。
int F(int A[ ],int N) {
if(N==1)
return 1 ;
return F(A,N-1)+1
}
答案是O(N),但我只是不知道如何证明这一点。
答案 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)