宏导致的时间复杂度暴增
#define MAX(a, b) ((a > b) ? (a):(b))
static int cycle = 0;
int a[] = { 9, 3, 5, 2, 1, 0, 8, 7, 6, 4 };
int MAX2(int a, int b)
{
return a > b ? a : b;
}
int max(int n)
{
++cycle;
return !n ? a[0] : MAX(a[n], max(n - 1));
// return !n ? a[0] : MAX2(a[n], max(n - 1));
}
int main()
{
max(4);
return 0;
}
- 使用函数定义
max(4) n = 4:
return max2(a[4], max(3));
max(3) n = 3:
return max2(a[3], max(2));
max(2) n = 2:
return max2(a[2], max(1));
max(1) n = 1:
return max2(a[1], max(0));
max(0):
return a[0];
函数调用会先调用max(3),不断向下调用,直到max(0),然后向上返回,依次求出max(1),max(2)......max总共执行5次
- 使用宏定义
max(4): n = 4
((a[4] > max(3)) ? (a[4]):(max(3)));
max(3): n = 3
((a[3] > max(2)) ? (a[3]):(max(2)));
max(2): n = 2
((a[2] > max(2)) ? (a[2]):(max(1)));
max(1): n = 1
((a[1] > max(0)) ? (a[1]):(max(0)));
max(0): n = 0
return a[0];
宏定义,前半段判断语句先求一次max,后半段赋值再求一次max,总共执行2 * 2 * 2 * 2 * 2 = 32次

浙公网安备 33010602011771号