Другой цикл с неожиданным выводом

У меня есть этот код, и я не понимаю вывод. Я ожидал выход 121.
Я стараюсь понять эту конкретную функцию, а не факториальную функцию.

Код:

function a($num) {
static $totFac = 1;

if($num > 0){
$totFac = $totFac * $num;
a($num - 1);
}

$totFac++;
return $totFac;
}

$result = a(5);
echo 'result: '.$result;

Выход:

126

0

Решение

<?php
function a($num) {
static $totFac = 1;
if($num > 0){
$totFac = $totFac * $num;
echo 'totfac: '.$totFac . "<br>";
return a($num - 1); //you have to return here to stop execution
} else {
$totFac++;
return $totFac;
}
}
$result = a(5);
echo 'result: '.$result;
?>

Посмотрите на комментарий для объяснения

0

Другие решения

  • Прежде всего, факториал 5 равен 120, это объясняется как:

    5! = 5 x 4 x 3 x 2 x 1 = 120
    
  • Во-вторых, вот так должен выглядеть факториал с рекурсивным вызовом:

    function factorial($number) {
    if ($number < 2) {
    return 1;
    } else {
    return ($number * factorial($number-1));
    }
    }
    
  • Если вы не имеете в виду факториал, то вот как это происходит, если я изменю вашу функцию

    function a($num) {
    static $totFac = 1;
    
    if($num > 0){
    $totFac = $totFac * $num;
    echo "calc totFac: " . $totFac . "\n";
    a($num - 1);
    }
    
    $totFac++;
    echo "increment totFac: " . $totFac . "\n";
    return $totFac;
    }
    
    $result = a(5);
    echo 'result: '.$result;
    

Это вывод эха

calc totFac: 5
calc totFac: 20
calc totFac: 60
calc totFac: 120
calc totFac: 120
increment totFac: 120
increment totFac: 121
increment totFac: 122
increment totFac: 123
increment totFac: 124
increment totFac: 125
result: 126
3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector