`

中科院一道无聊的题目

 
阅读更多

下面程序运行结果是120 但如果把第五行abs(1) 该为1的话,结果变成1,何故?

int fact()
{
 static int i=5;
 if(i==0)
   return 1;
 else {
   i=i-1;
   return (i+abs(1))*fact();
 }
}
main(){
  printf("%d",fact());
}

 
这是中科院的一道考题,其实是考编译原理。
因为(i+1)*fact()对于*的右边是函数,所以要先计算,所以最后出现了1的结果,但是对于(i+abs(1))*fact(),左右两边都是函数,所以先计算左边,再计算右边,结果就是120了!!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics