下面程序运行结果是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了!!

被折叠的 条评论
为什么被折叠?



