int print(int a, int b) (a<b)打印a到b所有数字和逆序
如:print(1, 7)的输出结果:
1
2
3
4
5
6
7
6
5
4
3
2
1
想了半天也没想出来,直接看答案:
int print(a,b) { return printf("%d/n", a) && (a >= b || print(a + 1, b)) && (a >= b || printf("%d/n", a)); } int main() { print(1,7); } |
发现实在巧妙,利用了编译器处理&&和||运算符的特点,只用一行完成了一个递归。
编译器在处理&& 的时候,如果左操作数为0,那么右操作数的运算表达式将被忽略,而直接返回0,||也是进行了同样的处理,左操作数为1就直接返回1,后面其他是什么都不会去运算了。
举个例子:
int i = 0;
if(1&&++i)
{
printf("%d", i);
}
这里输出的i肯定是0,因为,++i这一句被忽略掉了。