Я просто делаю некоторые упражнения рекурсии в 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'? Что ты пытаешься сделать? как я должен понять это, если ваш код нарушен? –