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

时间:2015-12-11 04:40:05

标签: php recursion echo

以下输出为1102555。这怎么可能?递归是先发生还是回声?

abc(11);
function abc($a){       
    if(intval($a/2) != 0){      
         echo  abc(intval($a/2)) + 10 *  ($a/2);        
    }else{
        echo 1;         
    }
}

2 个答案:

答案 0 :(得分:1)

在这种情况下,递归是第一位的。从最内层到外层评估表达。所以在这种情况下它是这样的:

  1. $ A / 2
  2. INTVAL(RESULT_OF_PREVIOUS_HERE)
  3. ABC(RESULT_OF_PREVIOUS_HERE
  4. $ A / 2
  5. 10 *(RESULT_OF_PREVIOUS_HERE)
  6. echo RESULT_OF_PREVIOUS_HERE

答案 1 :(得分:1)

在你的情况下,首先会发生递归,因为每当你用$ a / 2大于0调用函数abc时,echo中的abc()会一次又一次地被调用,直到$ a / 2的值为少于0。