System.out.print()执行顺序

今天使用递归调用计算large ln(n!)的时候发现一个很奇怪的问题

代码:
public class practice20 {
public static double nStep(double N) {
	if (N<=0) {
		return 1;
	}
	System.out.print(N+"*"); // -----------------------------------------@1
	return N*nStep(N-1);
}
public static void main(String[] args) {
	for (int i = 1; i < 5; i++) {
		System.out.print("ln("+i+"!)="+Math.log(nStep(i))); //-------@2
		System.out.println();
	}
	
}
	
}

结果:
1.0*ln(1!)=0.0
2.0*1.0*ln(2!)=0.6931471805599453
3.0*2.0*1.0*ln(3!)=1.791759469228055
4.0*3.0*2.0*1.0*ln(4!)=3.1780538303479458

可以看到@1语句的阶乘语句执行居然比@2语句的拼接快

结果分析:
                        @3              @4       @5
在执行System.out.print("ln("+i+"!)="+Math.log(nStep(i))); 的时候是

先执行函数的,然后获取函数值然后在执行拼接,最后执行输出

执行顺序为@5 => @1 => @4 => @4 =>@3 
原文地址:https://www.cnblogs.com/jeasion/p/10758330.html