Рекурсивные функции
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 8 из 68.
Рекурсия — это метод программирования, при котором функция вызывает саму себя для решения задачи. Это создает поведение, подобное циклу, но вместо использования традиционных циклов функция многократно вызывает саму себя с измененными параметрами до тех пор, пока не будет достигнуто решение.
Каждая рекурсивная функция должна иметь два основных компонента для правильной работы:
Базовый случай: Это условие, которое останавливает рекурсию. Без него функция вызывала бы саму себя бесконечно, что привело бы к сбою программы. Базовый случай определяет, когда функция должна вернуть результат вместо того, чтобы вызывать себя снова.
Рекурсивный шаг: Здесь функция вызывает саму себя с измененной версией исходной задачи, постепенно приближаясь к базовому случаю.
Вот простой пример рекурсивной функции, которая вычисляет факториал:
<?php
function factorial($n) {
// Базовый случай: факториал 1 равен 1
if ($n <= 1) {
return 1;
}
// Рекурсивный шаг: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // Выводит: 120
?>В этом примере factorial(5) вызывает factorial(4), который вызывает factorial(3) и так далее, пока не достигнет factorial(1) (базовый случай). Затем результаты перемножаются в обратном порядке: 1 × 2 × 3 × 4 × 5 = 120.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте рекурсивную функцию с названием sumDigits, которая принимает положительное целое число и возвращает сумму его цифр. Функция должна использовать рекурсию, чтобы разбить число по цифрам.
Вы получите один входной параметр: положительное целое число. Прочитайте входные данные, вызовите свою рекурсивную функцию с этим числом и выведите сумму его цифр.
Формат входных данных: Одна строка, содержащая положительное целое число
Ожидаемый результат: Сумма всех цифр в числе
Шпаргалка
Рекурсия — это метод программирования, при котором функция вызывает саму себя для решения задачи. Каждая рекурсивная функция нуждается в двух компонентах:
Базовый случай: Условие, которое останавливает рекурсию для предотвращения бесконечных циклов.
Рекурсивный шаг: Часть, где функция вызывает саму себя с измененными параметрами, приближаясь к базовому случаю.
Пример рекурсивной функции факториала:
<?php
function factorial($n) {
// Базовый случай: факториал 1 равен 1
if ($n <= 1) {
return 1;
}
// Рекурсивный шаг: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // Выводит: 120
?>Попробуйте сами
<?php
// Чтение входных данных
$number = intval(fgets(STDIN));
// TODO: Создайте вашу рекурсивную функцию sumDigits здесь
// Вызов функции и вывод результата
echo sumDigits($number);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров