以C语言为例,一般来说,交换两个变量的值需要用到一个中间变量:
int a, b;
a = 10;
b = 11;
int c; // 中间变量
c = a;
a = b;
b = c;
但也可以省掉这个中间变量,只是运算的次数增多了:
int a, b;
a = 10;
b = 11;
b = a + b; // 得出两数字的和
a = a - b; // a减去两数字的和就得出原来的b的负值
a = -a;
b = b - a; // 两数字的和减去原来b的值,就得出原来a的值
这是一个典型的时空问题:如果想省掉一个变量(节省内存),就需要多几次运算(运算时间更长)。在目前内存价格低廉的情况下,当然会选择用空间交换时间。
评论 (1条)