1. Обыкновенная рекурсивная реализация. Согласно общерекурсивной формуле fact(n) = n * fact(n-1), легко написать код расчета факториала.
Преимущество обычной рекурсивной реализации состоит в том, что код относительно краток, а тот же процесс, что и общая формула, упрощает понимание кода. Недостаток заключается в том, что из-за необходимости частого вызова самого себя требуется большое количество операций push и pop, а общая эффективность вычислений невысока.
функция факт(int $n): int { если ($n == 0) { возврат 1; } вернуть $n * факт($n - 1); }
2. Обычная реализация цикла имеет некоторую разновидность динамического программирования, но из-за низкой частоты использования переменных промежуточного состояния не требуется дополнительного места для хранения.
Поэтому он проще, чем общий алгоритм динамического программирования. Обычный рекурсивный метод представляет собой процесс вычислений сверху вниз (от n до 1), тогда как обычный цикл представляет собой расчет снизу вверх.
функция факт(int $n): int { $результат = 1; $номер = 1; в то время как ($num <= $n) { $результат = $результат * $num; $номер = $номер + 1; } вернуть $результат; }
Выше приведен метод реализации факториала n в php. Надеюсь, он будет полезен всем.