函数的递归调用:
#include<stdio.h>
void fun(int a[], int n, int k)
{
int i;
if (k == n - 1)
{
for (i = 0; i < n; i++) //执行次数为n
{
printf("%5d", a[i]);
}
}
else
{
for (i = k; i < n; i++) //执行次数为n-k
a[i] = a[i] + i * i;
fun(a, n, k + 1);
}
}
{
int i;
if (k == n - 1)
{
for (i = 0; i < n; i++) //执行次数为n
{
printf("%5d", a[i]);
}
}
else
{
for (i = k; i < n; i++) //执行次数为n-k
a[i] = a[i] + i * i;
fun(a, n, k + 1);
}
}
int main()
{
int b[10] = { 1,2,3,4,5,6,7,8,9,10 };
int m, h;
int *p = &m;
*p = 10;
fun(b, *p, 0);
return 0;
}
{
int b[10] = { 1,2,3,4,5,6,7,8,9,10 };
int m, h;
int *p = &m;
*p = 10;
fun(b, *p, 0);
return 0;
}
调用fun(b,*p,n),计算调用了多少次
先考虑第一种情况:当k==n-1时结束递归 ,时间复杂度为n
else情况:(n-k)+T(n,k+1) 根据else里的代码,从k到n,执行n-k次,之后每次k+1,时间复杂度为从2到n,
总共的时间复杂度是n+[n(n+1)-2]/2 = n^2+3n/2 - 1 =>O(n^2)