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