Функции и рекурсия в 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("Реверс строки:", реверс(сообщение)); // Выведет: тевирп
Как это работает:
- Функция берет последний символ (
т) и вызывает себя для строки без последнего символа (приве). - Новый вызов берет
еи вызывает себя дляприв. - Так продолжается, пока строка не станет пустой.
- Все символы собираются в обратном порядке.
Пример 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.
Теперь ты знаешь, как использовать функции и рекурсию. Пробуй решать задачи — это как собирать конструктор: из маленьких функций собираются большие программы!