亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于PHP的遞歸傳參.為什么第一種能得到想要的值,第二種不行呢?請解答.

關于PHP的遞歸傳參.為什么第一種能得到想要的值,第二種不行呢?請解答.

PHP
楊__羊羊 2019-03-18 16:55:41
一個php的全排列函數 function getAll($array,$str=null){ $length = count($array); if($length<=1){ echo $str.$array[0].PHP_EOL; }else{ for($i=0;$i<$length;$i++){ $temp = $array; array_splice($temp,$i,1); //print_r($temp); getAll($temp,$str.$array[$i]); } } } $array = [a,b,c]輸出abcacbbacbcacabcba是正確的.但是 function getAll2($array,$str=null){ $length = count($array); if($length<=1){ echo $str.$array[0].PHP_EOL; }else{ for($i=0;$i<$length;$i++){ $temp = $array; array_splice($temp,$i,1); $str =$str.$array[$i]; getAll2($temp,$str); } } } 僅僅變化了一點點,$str =$str.$array[$i];getAll2($temp,$str); 換了一下傳遞參數的方法,整個輸出就變了.請問能解釋一下問什么嗎?
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

因為在getAll2中. for循環里面:

$str =$str.$array[$i];

你對str進行了重新賦值,而第一個str沒有被重新賦值,只是單純拼了個新的傳進去.

把第二個改成這樣也是正常的:

function getAll2($array,$str=null){    
    $length = count($array);
    if($length<=1){
        echo $str.$array[0].PHP_EOL;
    }else{
        for($i=0;$i<$length;$i++){
            $temp = $array;
            array_splice($temp,$i,1);
            $str2 =$str.$array[$i];
            getAll2($temp,$str2); 
        }
    }
}
查看完整回答
反對 回復 2019-03-18
  • 1 回答
  • 0 關注
  • 537 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號