Рекурсия и несколько возвращаемых значений
Создавайте функции, вызывающие себя и порождающие новые ветви.
«Рекурсия и несколько возвращаемых значений» — бесплатный урок Zig Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Функция вызывает саму себя
Рекурсия — это когда функция вызывает себя, чтобы шаг за шагом решить меньшую часть той же задачи. 🔁
В каждой рекурсии нужен базовый случай
Базовый случай — это точка остановки. Без него функция вызывала бы себя бесконечно и переполнила бы стек.
Рекурсивный случай
Рекурсивный случай снова вызывает функцию для меньшего входного значения, постепенно приближаясь к базовому случаю.
fn factorial(n: u64) u64 {
if (n <= 1) return 1;
return n * factorial(n - 1);
}Проследите небольшой вызов
Вызов factorial(3) превращается в 3 * factorial(2), затем в 2 * factorial(1). Базовый случай возвращает 1, после чего результаты перемножаются в обратном направлении.
Рекурсия использует стек
Каждый вызов добавляет кадр в стек. Слишком большая глубина приводит к переполнению стека, поэтому разумно ограничивайте глубину рекурсии.
Многие задачи лучше решать циклом
Всё, что можно записать рекурсивно, можно также записать как цикл. Циклы не создают дополнительные кадры стека и поэтому часто безопаснее.
fn factorial(n: u64) u64 {
var acc: u64 = 1;
var i: u64 = 2;
while (i <= n) : (i += 1) acc *= i;
return acc;
}Функция возвращает один тип
У функции Zig есть единственный тип возвращаемого значения, но в ней может быть много операторов return, возвращающих значения этого типа.
Ранний возврат разветвляет выполнение
Можно вернуть значение досрочно из разных ветвей. Каждый путь возвращает значение объявленного типа и сразу завершает функцию.
fn sign(n: i32) i32 {
if (n > 0) return 1;
if (n < 0) return -1;
return 0;
}Возвращайте несколько значений в структуре
Чтобы вернуть несколько значений, верните структуру или кортеж, объединяющий их в один результат.
fn divmod(a: u32, b: u32) struct { q: u32, r: u32 } {
return .{ .q = a / b, .r = a % b };
}Распакуйте результат
Вызывающий код обращается к объединённым полям по имени, например result.q и result.r, чтобы использовать каждую возвращённую часть.
const res = divmod(7, 2);
// res.q is 3, res.r is 1Возвращайте также ошибки
Функция может возвращать объединение с ошибкой, чтобы одна ветвь сообщала о сбое, а другие возвращали обычное значение.
Быстрая проверка
Вы написали рекурсивную функцию, но она не останавливается и завершается с ошибкой. Что вы, скорее всего, забыли?
Итоги
Для рекурсии нужны базовый случай и рекурсивный вызов с меньшим значением. У функции один тип возвращаемого значения, но много путей возврата, а структура объединяет несколько результатов. 🎯
Часто задаваемые вопросы
Урок «Рекурсия и несколько возвращаемых значений» бесплатный?
Да — полный текст урока «Рекурсия и несколько возвращаемых значений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «Рекурсия и несколько возвращаемых значений»?
Создавайте функции, вызывающие себя и порождающие новые ветви. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Рекурсия и несколько возвращаемых значений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Синтаксис функций и возвращаемые типы
- Передача значений и ссылок
- Функции pub и видимость
- Рекурсия и несколько возвращаемых значений