下面的输出是1102555
。这怎么可能?递归是先发生还是回显?
abc(11);
function abc($a){
if(intval($a/2) != 0){
echo abc(intval($a/2)) + 10 * ($a/2);
}else{
echo 1;
}
}
在您的情况下,递归将首先发生,因为每次调用$a/2大于0的函数abc时,echo中的abc()都会被反复调用,直到$a/2的值小于0。
递归在这种情况下是第一个。表达式是从内部到外部计算的。所以在这种情况下,它是这样的:
- $a/2
- intval(RESULT_OF_PREVIOUS_HERE)
- abc(结果_OF_PREVIOUS_HERE
- $a/2
- 10*(结果_OF_PREVIOUS_HERE)
- echo RESULT_OF_PREVIOUS_HERE