1.设 t 法
当求解出现while循环时,设t求解
void fun(int n)
{int i = 1;while(i <= n)i = i * 2;
}
解法:
1.设循环次数为t;
2.将while循环中的语句展开到循环t次
1 2 3 …… t
2 2^2 2^3 …… 2^t
3.跳出循环
2^t > n
t >
4.时间复杂度
O(n) =
2.
法
当出现for循环时,使用
for(i = n - 1; i > 1; i--)for(j = 1; j < i; j++)if(A[j] > A[j + 1])A[j]与A[j + 1]对换;
直接使用
计算得出时间复杂度
3.递归
递归调用自己的函数
int fact(int n)
{if(n <= 1)return 1;return n * fact(n - 1);
}
1.主要看return语句
2.将调用自己的函数改写成while循环
while(n > 1)
{
n = n - 1; //递归调用了n - 1次
}
3.设 t 法
1 2 3 …… t
n - 1 n - 2 n - 3 …… n - t
4.跳出循环
n - t > 1
t > n - 1
5.时间复杂度
O(n) = n