一道有趣的c语言,求高手回答

来源:百度知道 编辑:UC知道 时间:2024/05/30 11:02:58
编写函数: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
条件:只允许用一行代码,不能用循环和if,判断等语句,以及(,) (?:)等
这是一道某知名企业的笔试的最后一道。有一定难道,但可以培养思维和开拓视野,大致方向应该是用递归。但本人比较愚笨,做不出来,望高手指点。

======================

总觉得网上搜索下来得版本有点不符题意,a>=b是判断语句吧?
这个版本如何?
return (b+1-a)&&printf("%d\n",a)&&((print(a+1,b)||((b-a)&&printf("%d\n",a)))&&0);

int print(int a,int b)
{
return printf("%d\n", a) && (a >= b || print(a + 1, b)) && (a >= b || printf("%d\n", a));
}
我想了想应当用递归,但没想出来怎么弄,呵呵,找了找,找到了
printf("%d\n", a)返回是输出的字符数,与操作定要执行(a >= b || print(a + 1, b)),其中||或操作起到了if判断的意思,如果满足a >= b 则不再执行print(a + 1, b),起到终结递归的作用,后面的(a >= b || printf("%d\n", a))则是相返的顺序执行输出a的操作,看得出来程序作者对C的理解之深,佩服呀!!

if(*)或者?:这种是判断语句,a>=b是逻辑表达式

printf("1\n2\n3\n4\n5\n6\n7\n6\n5\n4\n3\n2\n1\n")

int print(int a, int b)
{
return printf("%d\n", a) && (a >= b || print(a + 1, b)) && (a >= b || printf("%d\n", a));
}

int main()
{
print(1,7);
}

return printf("%d\n",print(a+1,b))

int print(int a, int b)
{
int n;
if a<b
{
for(n=a;n<=b;n++)<