0Pricing
Zig Academy · Урок

Рекурсия и несколько возвращаемых значений

Создавайте функции, вызывающие себя и порождающие новые ветви.

«Рекурсия и несколько возвращаемых значений» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Синтаксис функций и возвращаемые типы
  2. Передача значений и ссылок
  3. Функции pub и видимость
  4. Рекурсия и несколько возвращаемых значений
← Назад к Zig Academy