abs(1) == 1?
这是个同学让我帮忙解决的研究生入学复试题。
看下面的程序:
int fact()
{
static int i=5;
if(i==0)return 1;
else{
i=i-1;
return (i+abs(1))*fact();
}
}
main()
{
printf("factor of 5=%d\n",fact());
}
在TC下,运行结果是factor of 5=120。
但如果把fact()中的abs(1)改成1,运行结果是factor of 5=1!
问题就是为什么会这样。
原因我已经找到了,如果写abs(1),编译器先算(i+abs(1))再乘fact(),所以是正常的结果120。如果写成1,编译器会先算fact(),等fact()最终返回时,i的值已经是0了,所以最终就变成1*1*1*1*1,答案是1。
我想问的是:TC这样处理是不是有它的道理?如果按标准C来说,对这样的情况是否有明确规定,还是由编译器自己处理?
这个问题好像有点无聊,不过希望大家能来谈谈看法。谢谢!