Рекурсия в структуре данных: как это работает, типы и когда используется

Опубликовано: 2020-05-22

Начнем с определения рекурсии в структуре данных. Позже мы обсудим различные типы рекурсии и то, как рекурсия используется для решения различных задач.

Оглавление

Что такое рекурсия?

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

Процесс, в котором функция вызывает саму себя, может происходить как прямо, так и косвенно. Эта разница в вызове порождает разные типы рекурсии, о которых мы поговорим чуть позже. Некоторые из проблем, которые можно решить с помощью рекурсии, включают DFS of Graph, Towers of Hanoi, различные типы обхода дерева и другие. Чтобы узнать о рекурсии и других концепциях науки о данных, ознакомьтесь с онлайн-курсами IIIT-B по науке о данных.

Читайте: 13 интересных идей проекта структуры данных

Как работает рекурсия?

Концепция рекурсии основана на идее, что проблема может быть решена гораздо проще и за меньшее время, если она представлена ​​в одной или более мелких версиях. Добавление базовых условий для остановки рекурсии — еще одна важная часть использования этого алгоритма для решения проблемы.

Опыт кодирования не требуется. Карьерная поддержка на 360°. Диплом PG в области машинного обучения и искусственного интеллекта от IIIT-B и upGrad.

Люди часто считают, что невозможно определить сущность с точки зрения самой себя. Рекурсия доказывает, что теория ошибочна. И если эта техника выполняется правильно, она может дать очень сильные результаты. Давайте посмотрим, как работает рекурсия, на нескольких примерах. Что такое предложение? Его можно определить как два или более предложений, соединенных вместе с помощью союза. Точно так же папка может быть устройством хранения, используемым для хранения файлов и папок. Предок может быть родителем одного и предком другого члена семьи в генеалогическом древе.

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

Рекурсия также является достаточно хорошей техникой программирования. Рекурсивная подпрограмма определяется как прямо или косвенно вызывающая сама себя. Прямой вызов подпрограммы означает, что определение подпрограммы уже содержит оператор вызова для вызова подпрограммы, которая была определена.

С другой стороны, косвенный вызов подпрограммы происходит, когда подпрограмма вызывает другую подпрограмму, которая затем вызывает исходную подпрограмму. Рекурсия может использовать несколько строк кода для описания очень сложной задачи. Обратимся теперь к различным типам рекурсии, которых мы уже коснулись.

Читайте также: Топ-6 языков программирования для изучения

Типы рекурсии

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

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

Прямая рекурсия может использоваться для вызова только одной функции. С другой стороны, косвенная рекурсия может использоваться для вызова более чем одного метода или функции с помощью других функций, и это тоже несколько раз. Косвенная рекурсия не создает накладных расходов, в отличие от ее прямого аналога.

Когда используется рекурсия?

Есть ситуации, в которых вы можете использовать рекурсию или итерацию. Однако всегда следует выбирать решение, которое кажется более естественным для решения проблемы. Рекурсия всегда является подходящим вариантом, когда речь идет об абстракции данных. Люди часто используют рекурсивные определения для определения данных и связанных операций.

И не будет ошибкой сказать, что рекурсия — это в основном естественное решение проблем, связанных с реализацией различных операций над данными. Однако есть определенные вещи, связанные с рекурсией, которые не делают ее лучшим решением для каждой проблемы. В этих ситуациях лучше всего подходит альтернатива, такая как итерационный метод.

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

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

Помните о нескольких вещах, которые помогут вам решить, является ли выбор рекурсии для решения проблемы правильным или нет. Вы должны выбрать рекурсию, если проблема, которую вы собираетесь решить, упоминается в рекурсивных терминах и рекурсивное решение кажется менее сложным.

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

Также проверьте: 23 лучших курса компьютерного программирования, чтобы получить работу

Заключение

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

Если вам интересно узнать о структуре данных и науке о данных, ознакомьтесь с программой Executive PG IIIT-B и upGrad по науке о данных, которая создана для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество в отрасли. экспертов, общение один на один с отраслевыми наставниками, более 400 часов обучения и помощь в трудоустройстве в ведущих фирмах.

Каково наиболее распространенное применение рекурсии в реальной жизни?

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

Наиболее распространенное применение рекурсии в реальной жизни — это когда вы подсчитываете, сколько денег у вас есть в коробке, наполненной рупиями. 100 заметок. Если заметок слишком много, вы можете просто попросить своего друга сделать ту же работу, разделив всю стопку на две части. Как только вы оба закончите подсчет, вы просто суммируете оба результата, чтобы получить общую сумму.

Какими свойствами должна обладать рекурсивная функция?

Рекурсивная функция может продолжаться как бесконечный цикл. Есть два свойства, которые должны быть определены для любой рекурсивной функции, чтобы она не попала в бесконечный цикл. Они есть:

1. Базовые критерии. Должно быть одно предопределенное базовое условие. Всякий раз, когда этот базовый критерий выполняется, функция прекращает вызывать себя.
2. Прогрессивный подход. Рекурсивные вызовы должны состоять из прогрессивного подхода. Всякий раз, когда рекурсивный вызов функции выполняется, он должен приближаться к базовому условию.

Каковы преимущества и недостатки рекурсии?

Некоторые из преимуществ рекурсии заключаются в том, что вам нужно определить только базовое условие и рекурсивный случай в рекурсивной функции. Это делает код довольно простым и коротким по сравнению с итеративным кодом, а некоторые задачи, такие как обход дерева и график, по своей сути являются рекурсивными.

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