⚡ JavaScript

Функции и рекурсия в JavaScript (Node.js): подробное руководство

Функции и рекурсия в JavaScript

Введение: Зачем нужны функции?

Представь, что ты строишь дом. Ты не забиваешь каждый гвоздь заново, придумывая новый способ. Ты берешь молоток и используешь его снова и снова. В программировании функции — это такие «молотки». Это готовые блоки кода, которые можно вызвать (использовать) много раз, чтобы не писать одно и то же.

Функции делают код:

  • Короче: не нужно повторять одни и те же действия.
  • Понятнее: имя функции говорит, что она делает (например, сложитьДоходы).
  • Удобнее: если нужно что-то исправить, меняешь только внутри функции.

Основной синтаксис: как создать и вызвать функцию

В JavaScript функция создается так:

function имяФункции(параметры) {
  // Тело функции — то, что она делает
  return результат; // (необязательно)
}

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

имяФункции(аргументы);

Параметры — это переменные, которые функция принимает на вход (как пустые коробки). Аргументы — это конкретные значения, которые ты кладешь в эти коробки при вызове.

Пример 1: Семейный бюджет (сумма двух чисел)

Напишем функцию, которая складывает два дохода и возвращает общую сумму.

// Создаем функцию
function суммаДоходов(доход1, доход2) {
  let общаяСумма = доход1 + доход2;
  return общаяСумма; // Возвращаем результат
}

// Вызываем функцию и выводим результат
const зарплата = 50000;
const фриланс = 15000;
let бюджет = суммаДоходов(зарплата, фриланс);
console.log("Общий доход семьи:", бюджет); // Выведет: 65000

Как это работает: Функция суммаДоходов принимает два числа, складывает их и возвращает сумму. Мы сохраняем результат в переменную бюджет и выводим его.

Пример 2: Сравнение температур (возврат максимального числа)

Функция принимает две температуры и возвращает большую.

function найтиМаксимум(temp1, temp2) {
  if (temp1 > temp2) {
    return temp1;
  } else {
    return temp2;
  }
}

let утром = 15;
let днем = 22;
let самаяВысокая = найтиМаксимум(утром, днем);
console.log("Самая высокая температура:", самаяВысокая); // Выведет: 22

Пример 3: Проверка четности числа

Проверим, является ли количество коробок четным числом. Функция возвращает true (да) или false (нет).

function isEven(число) {
  if (число % 2 === 0) {
    return true;
  } else {
    return false;
  }
}

let коробки = 150;
console.log("Четное количество?", isEven(коробки)); // Выведет: true

Рекурсия: функция вызывает саму себя

Рекурсия — это когда функция вызывает саму себя, чтобы решить большую задачу, разбивая ее на маленькие одинаковые шаги. Это как матрешка: внутри большой матрешки — такая же, но поменьше.

Важное правило: у рекурсии обязательно должен быть базовый случай — условие, при котором функция останавливается, иначе она будет вызывать себя бесконечно и программа «зависнет».

Пример 4: Реверс строки с помощью рекурсии

Разберем задачу: нужно развернуть строку задом наперед. Например, «кот» → «ток».

function реверс(строка) {
  // Базовый случай: если строка пустая или из одного символа, возвращаем её
  if (строка.length <= 1) {
    return строка;
  }
  // Рекурсия: берем последний символ + реверс оставшейся части
  return строка[строка.length - 1] + реверс(строка.slice(0, -1));
}

let сообщение = "привет";
console.log("Реверс строки:", реверс(сообщение)); // Выведет: тевирп

Как это работает:

  1. Функция берет последний символ (т) и вызывает себя для строки без последнего символа (приве).
  2. Новый вызов берет е и вызывает себя для прив.
  3. Так продолжается, пока строка не станет пустой.
  4. Все символы собираются в обратном порядке.

Пример 5: Поиск минимального элемента в списке (рекурсия)

Найдем самую низкую температуру за день. У нас есть массив чисел.

function найтиМинимум(массив) {
  // Базовый случай: если в массиве один элемент, он и есть минимальный
  if (массив.length === 1) {
    return массив[0];
  }
  // Находим минимум в хвосте массива (без первого элемента)
  let минимумОстатка = найтиМинимум(массив.slice(1));
  // Сравниваем первый элемент с минимумом остатка
  if (массив[0] < минимумОстатка) {
    return массив[0];
  } else {
    return минимумОстатка;
  }
}

let температуры = [15, 8, 22, 3, 10];
console.log("Минимальная температура:", найтиМинимум(температуры)); // Выведет: 3

Частые ошибки новичков

  • Забыть вызвать функцию. Если написать просто суммаДоходов (без скобок), программа не выполнит код внутри. Всегда ставь скобки: суммаДоходов(50000, 15000).
  • Забыть про return. Если не написать return, функция вернет undefined (пусто). Функция без return делает что-то, но не отдает результат обратно.
  • Бесконечная рекурсия. Если не написать базовый случай, функция будет вызывать себя вечно, пока не закончится память. Всегда проверяй условие остановки!
  • Путать параметры и аргументы. Параметры — это «переменные» в определении функции. Аргументы — это «значения», которые ты передаешь при вызове.

Итоговый пример: Решаем похожую задачу

Задача: На фабрике считают коробки. Нужно написать функцию, которая принимает массив чисел (количество коробок в каждой партии) и возвращает их сумму. Используем рекурсию.

function суммаКоробок(партии) {
  // Базовый случай: если массив пуст, сумма равна 0
  if (партии.length === 0) {
    return 0;
  }
  // Берем первую партию и складываем с суммой остальных
  return партии[0] + суммаКоробок(партии.slice(1));
}

let партииКоробок = [100, 250, 75, 180];
let всего = суммаКоробок(партииКоробок);
console.log("Всего коробок:", всего); // Выведет: 605

Как это работает: Функция берет первую партию (100), затем вызывает себя для оставшихся [250, 75, 180]. Та берет 250 и вызывает себя для [75, 180], и так далее. Когда массив становится пустым, возвращается 0. Все числа складываются: 100 + 250 + 75 + 180 + 0 = 605.

Теперь ты знаешь, как использовать функции и рекурсию. Пробуй решать задачи — это как собирать конструктор: из маленьких функций собираются большие программы!