эхо и вернуть печать разных значений - PullRequest
0 голосов
/ 15 января 2019

Я работаю над расширением php bcmath для факторных вычислений и обнаружил, что echo и return вызывают разные результаты

Этот код генерирует неправильный результат

<?php
    $a = 25;
    function test($a){
        if($a>1){
        $sum   =   bcmul($a, test($a-1)) ;
            echo $sum;
        } 
       if($a == 1) { return $a ;}
    }
    test($a);   // Output  200000000000000000000000
    ?>  

в то время как код ниже генерирует правильный результат

<?php 
$a = 25;
function test($a){
    if($a>1){
    $sum   =   bcmul($a, test($a-1)) ;
        return $sum;
    } 
   if($a == 1) { return $a ;}
}
echo test($a);

?>

эта проблема генерирует 200000000000000000000000 результат с echo $sum и возвращает неправильный результат, но если i echo test() и return $sum, то это имеет тенденцию к правильному результату 15511210043330985984000000. почему

1 Ответ

0 голосов
/ 15 января 2019

Пожалуйста, используйте последнюю версию с return и echo test(), потому что вы используете рекурсию (см. Строку с test($a-1)). Рекурсия работает правильно только при использовании операторов возврата , которые передают промежуточные результаты на следующий уровень более высокого уровня в стеке.

Эхо, с другой стороны, не возвращает промежуточные результаты для дальнейшего расчета - оно просто выводит их на печать.

...