Рекурсивное вычитание (PHP)

129
19 февраля 2021, 23:40

Есть функция с рекурсивным вычитанием. На каждой рекурсии появляется промежуточный ответ (0, 1, 1 и 2). Что добавить в код, чтобы отображался не только окончательный ответ, но и промежуточные ответы?

<?php
function minus($n) {
    if ($n <=0) return;
    return $n - minus ($n-1);
}
echo minus(3);
?>

Добавил картинку с решением:

Answer 1

Чтобы обратить порядок вывода результатов, нужно делать вывод после рекурсивного спуска:

function minus($n) {
    if ($n <= 0) {
        echo "minus($n) = 0", PHP_EOL;
        return 0;
    }
    $res = $n - minus($n-1);
    echo "minus($n) = $res", PHP_EOL;
    return $res;
}
minus(3);  

Результат:

minus(0) = 0
minus(1) = 1
minus(2) = 1
minus(3) = 2

Можно отделить tracelog от вывода, передав массив для сохранения промежуточных результатов по ссылке:

function minus($n, &$log) {
    if ($n <= 0) {
        $log[] = 0;
        return 0;
    }
    $res = $n - minus($n-1, $log);
    $log[] = $res;
    return $res;
}
$log = [];
minus(3, $log);
echo implode(', ', $log); // 0, 1, 1, 2
Answer 2
<?php
function minus($n) {
    echo($n); // Все что необходимо.
    if ($n <=0) return;
    return $n - minus ($n-1);
}
echo minus(3);
?>
READ ALSO
Командная разработка сайтов [закрыт]

Командная разработка сайтов [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

104
JPA + Postgres Refcursor return error

JPA + Postgres Refcursor return error

Пытаюсь получить курсор из процедуры, но почему-то получаю ошибку

132
Методы Scanner и проверка

Методы Scanner и проверка

пишу описание к дипломному проекту хотелось бы у вас уточнить правильность моей информации по Java, знаю как работает, а вот описать правильно...

104