我只是做了一些用PHP遞歸練習和我有點通過以下的輸出困惑:爲什麼這個PHP代碼段的行爲如此?
function calc($numTimes, $i, $total) {
if (!$i && !$total) {$i = 1; $total = 1;}
if ($i <= $numTimes) {
$total = $total*2;
$i++;
calc($numTimes, $i, $total);
}
echo $total.'+'.$i.'<br />';
}
calc(5);
運行它之前,我會一直假設輸出爲32 + 6。但是,這是我得到:
32+6
32+6
16+5
8+4
4+3
2+2
我不明白。輸出不僅比我預期的要長5行,而是增加了總數,而不是從中刪除?另外,如果我添加一個休息;回聲後,它只返回32 + 6,這在某種程度上似乎是相關的。但是,當我更改代碼以便它使用return $ total;而不是回聲:
function calc($numTimes, $i, $total) {
if (!$i && !$total) {$i = 1; $total = 1;}
if ($i <= $numTimes) {
$total = $total*2;
$i++;
calc($numTimes, $i, $total);
}
return $total.'+'.$i.'<br />';
}
$r = calc(5);
echo $r;
這就是被打印出來:
2+2
我有點困惑,並希望有人能幫助我明白是怎麼回事。
'$ sum'是什麼?你想做什麼?如果你的代碼被破壞了,我該如何解決? –