在获取递归值之前打印输出


Printing Output before getting recursion value

下面的输出是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。

递归在这种情况下是第一个。表达式是从内部到外部计算的。所以在这种情况下,它是这样的:

  1. $a/2
  2. intval(RESULT_OF_PREVIOUS_HERE)
  3. abc(结果_OF_PREVIOUS_HERE
  4. $a/2
  5. 10*(结果_OF_PREVIOUS_HERE)
  6. echo RESULT_OF_PREVIOUS_HERE