Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия | |||
— | rekursija [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Рекурсия в программировании: | ||
+ | ~~Title: Что такое рекурсия и когда она реально полезна ~~ | ||
+ | {{htmlmetatags> | ||
+ | metatag-description=(Рекурсия помогает упростить сложные задачи. Разбираем, | ||
+ | }} | ||
+ | |||
+ | **Рекурсия** – это прием программирования, | ||
+ | |||
+ | Как правило, | ||
+ | ===== Определение рекурсивной функции ===== | ||
+ | Функция называется рекурсивной, | ||
+ | |||
+ | Прямой (непосредственной) рекурсией является вызов функции внутри тела этой функции. | ||
+ | |||
+ | <file cpp> | ||
+ | // пример для C++ | ||
+ | int a() | ||
+ | {.....a().....} | ||
+ | </ | ||
+ | |||
+ | Косвенной рекурсией является рекурсия, | ||
+ | |||
+ | Например: | ||
+ | <file cpp> | ||
+ | // пример для C++ | ||
+ | a(){.....b().....} | ||
+ | b(){.....c().....} | ||
+ | c(){.....a().....} | ||
+ | </ | ||
+ | Все функции a,b,c являются рекурсивными, | ||
+ | ===== Рекурсии или итерации? | ||
+ | С точки зрения теории, | ||
+ | |||
+ | Рекурсия производит вычисления гораздо медленнее, | ||
+ | |||
+ | Значит ли это, что рекурсия бесполезна? | ||
+ | |||
+ | ===== Когда применять рекурсию? | ||
+ | Важно помнить, | ||
+ | |||
+ | * Обход структур данных, | ||
+ | * Работа с древовидными объектами — рекурсивные функции упрощают обход и форматирование вложенных структур. | ||
+ | * Построение пользовательских интерфейсов — в некоторых фреймворках элементы интерфейса могут формироваться рекурсивно, | ||
+ | * Решение задач, сводящихся к подзадачам меньшей размерности — например, | ||
+ | |||
+ | ===== Пример JS: Рекурсивный подсчёт зарплат во вложенном объекте ===== | ||
+ | Допустим, | ||
+ | |||
+ | <file bash> | ||
+ | // Объект может содержать неизвестное количество департаментов и сотрудников | ||
+ | let company = { | ||
+ | sales: [ | ||
+ | { name: ' | ||
+ | { name: ' | ||
+ | ], | ||
+ | development: | ||
+ | web: [ | ||
+ | { name: ' | ||
+ | { name: ' | ||
+ | ], | ||
+ | internals: [ | ||
+ | { name: ' | ||
+ | ] | ||
+ | } | ||
+ | }; | ||
+ | </ | ||
+ | 🧠 Алгоритм: | ||
+ | * Если значение — массив: | ||
+ | * Если значение — объект: | ||
+ | |||
+ | **Переменная sum создаётся заново на каждом этапе рекурсии, | ||
+ | |||
+ | ✅ Решение с использованием рекурсии и reduce: | ||
+ | <file javascript> | ||
+ | function sumSalaries(department) { | ||
+ | // Проверяем: | ||
+ | if (Array.isArray(department)) { | ||
+ | // Суммируем все зарплаты сотрудников | ||
+ | return department.reduce((sum, | ||
+ | } else { | ||
+ | // Если это объект (например, | ||
+ | let sum = 0; | ||
+ | |||
+ | // Проходим по всем значениям объекта (поддепартаментам) | ||
+ | for (let subDep of Object.values(department)) { | ||
+ | // Рекурсивно вызываем ту же функцию | ||
+ | sum += sumSalaries(subDep); | ||
+ | } | ||
+ | |||
+ | return sum; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | console.log(`Сумма зарплат сотрудников = ${sumSalaries(company)}`); | ||
+ | </ | ||
+ | <file bash> | ||
+ | Сумма зарплат сотрудников = 6700 | ||
+ | </ | ||
+ | ===== Читайте также ===== | ||
+ | |||
+ | * [[zadachi._olimpiady]] | ||
+ | * [[zametki_po_jazyku_c]] | ||
+ | * [[dinamicheskie_struktury_dannyx]] | ||
+ | * [[binarnoe_derevo]] | ||
+ | * [[javascript]] | ||
+ | * [[reactjs]] |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга