Rekursion in der Datenstruktur: Funktionsweise, Typen und Verwendung

Veröffentlicht: 2020-05-22

Beginnen wir mit der Definition der Rekursion in der Datenstruktur. Wir werden später verschiedene Arten von Rekursion diskutieren und wie Rekursion verwendet wird, um verschiedene Probleme zu lösen.

Inhaltsverzeichnis

Was ist Rekursion?

In einfachen Worten, Rekursion ist eine Problemlösung und in einigen Fällen eine Programmiertechnik, die eine ganz besondere und exklusive Eigenschaft hat. Bei der Rekursion kann sich eine Funktion oder Methode selbst aufrufen, um das Problem zu lösen. Der Prozess der Rekursion beinhaltet die Lösung eines Problems, indem es in kleinere Varianten seiner selbst umgewandelt wird.

Der Prozess, in dem eine Funktion sich selbst aufruft, kann sowohl direkt als auch indirekt erfolgen. Dieser Unterschied im Aufruf führt zu verschiedenen Arten von Rekursionen, auf die wir später noch eingehen werden. Einige der Probleme, die mit Rekursion gelöst werden können, umfassen DFS von Graphen, Türme von Hanoi, verschiedene Arten von Baumdurchquerungen und andere. Um mehr über Rekursion und andere datenwissenschaftliche Konzepte zu erfahren, sehen Sie sich die datenwissenschaftlichen Online-Kurse von IIIT-B an.

Lesen Sie: 13 interessante Ideen für Datenstrukturprojekte

Wie funktioniert Rekursion?

Das Konzept der Rekursion basiert auf der Idee, dass ein Problem viel einfacher und in kürzerer Zeit gelöst werden kann, wenn es in einer oder kleineren Versionen dargestellt wird. Das Hinzufügen von Basisbedingungen zum Stoppen der Rekursion ist ein weiterer wichtiger Teil der Verwendung dieses Algorithmus zur Lösung eines Problems.

Keine Programmiererfahrung erforderlich. 360° Karriereunterstützung. PG-Diplom in maschinellem Lernen und KI von IIIT-B und upGrad.

Die Leute glauben oft, dass es nicht möglich ist, eine Entität durch sich selbst zu definieren. Rekursion beweist, dass diese Theorie falsch ist. Und wenn diese Technik auf die richtige Art und Weise durchgeführt wird, könnte sie sehr starke Ergebnisse liefern. Lassen Sie uns anhand einiger Beispiele sehen, wie Rekursion funktioniert. Was ist ein Satz? Es kann als zwei oder mehr Sätze definiert werden, die mit Hilfe einer Konjunktion verbunden werden. Ebenso könnte ein Ordner ein Speichergerät sein, das zum Speichern von Dateien und Ordnern verwendet wird. Ein Vorfahre könnte ein Elternteil von einem und ein Vorfahre eines anderen Familienmitglieds im Stammbaum sein.

Rekursion hilft bei der Definition komplexer Situationen mit ein paar sehr einfachen Worten. Wie würden Sie normalerweise einen Vorfahren definieren? Ein Elternteil, ein Großelternteil oder ein Urgroßelternteil. So könnte es weitergehen. Ebenso kann das Definieren eines Ordners eine schwierige Aufgabe sein. Es könnte alles sein, was einige Dateien und Ordner enthält, die selbst Dateien und Ordner sein könnten, und das könnte wieder so weitergehen. Aus diesem Grund macht die Rekursion das Definieren von Situationen viel einfacher als gewöhnlich.

Rekursion ist auch eine ausreichend gute Programmiertechnik. Eine rekursive Subroutine ist definiert als eine, die sich direkt oder indirekt selbst aufruft. Der direkte Aufruf eines Unterprogramms bedeutet, dass die Definition des Unterprogramms bereits die Aufrufanweisung zum Aufruf des definierten Unterprogramms enthält.

Andererseits geschieht der indirekte Aufruf eines Unterprogramms, wenn ein Unterprogramm ein anderes Unterprogramm aufruft, das dann das ursprüngliche Unterprogramm aufruft. Rekursion kann ein paar Codezeilen verwenden, um eine sehr komplexe Aufgabe zu beschreiben. Wenden wir uns nun den verschiedenen Arten der Rekursion zu, die wir bereits angesprochen haben.

Lesen Sie auch: Top 6 Programmiersprachen zum Lernen

Arten der Rekursion

Wie bereits erwähnt, gibt es nur zwei Arten der Rekursion. Lassen Sie uns sehen, wie sie sich voneinander unterscheiden. Die direkte Rekursion ist der einfachere Weg, da sie nur einen einzigen Schritt zum Aufrufen der ursprünglichen Funktion oder Methode oder Subroutine beinhaltet. Andererseits umfasst die indirekte Rekursion mehrere Schritte.

Der erste Aufruf erfolgt durch die ursprüngliche Methode an eine zweite Methode, die wiederum die ursprüngliche Methode aufruft. Diese Aufrufkette kann mehrere Methoden oder Funktionen aufweisen. Mit einfachen Worten können wir sagen, dass es immer eine Variation in der Tiefe der indirekten Rekursion gibt, und diese Variation in der Tiefe hängt von der Anzahl der an dem Prozess beteiligten Methoden ab.

Direkte Rekursion kann verwendet werden, um nur eine einzelne Funktion selbst aufzurufen. Andererseits kann die indirekte Rekursion verwendet werden, um mehr als eine Methode oder Funktion mit Hilfe anderer Funktionen aufzurufen, und das auch mehrmals. Die indirekte Rekursion verursacht keinen Overhead, während ihr direktes Gegenstück dies tut.

Wann wird Rekursion verwendet?

Es gibt Situationen, in denen Sie Rekursion oder Iteration verwenden können. Sie sollten jedoch immer eine Lösung wählen, die für ein Problem am natürlichsten erscheint. Eine Rekursion ist immer eine geeignete Option, wenn es um Datenabstraktion geht. Menschen verwenden häufig rekursive Definitionen, um Daten und zugehörige Operationen zu definieren.

Und es ist nicht falsch zu sagen, dass Rekursion meistens die natürliche Lösung für Probleme ist, die mit der Implementierung verschiedener Operationen auf Daten verbunden sind. Es gibt jedoch bestimmte Dinge im Zusammenhang mit der Rekursion, die sie möglicherweise nicht zur besten Lösung für jedes Problem machen. In diesen Situationen ist eine Alternative wie die iterative Methode am besten geeignet.

Die Implementierung der Rekursion verbraucht viel Stack-Speicherplatz, was oft zu Redundanz führen kann. Jedes Mal, wenn wir Rekursion verwenden, rufen wir eine Methode auf, die zur Erstellung einer neuen Instanz dieser Methode führt. Diese neue Instanz trägt verschiedene Parameter und Variablen, die auf dem Stack gespeichert und bei der Rückgabe übernommen werden. Rekursion ist zwar die einfachere Lösung als andere, aber normalerweise nicht die praktischste.

Außerdem haben wir keine Reihe vordefinierter Regeln, die bei der Auswahl von Iteration oder Rekursion für verschiedene Probleme helfen können. Der größte Vorteil der Verwendung der Rekursion besteht darin, dass es sich um eine präzise Methode handelt. Dies macht das Lesen und Pflegen einfacher als gewöhnlich. Rekursive Methoden sind jedoch nicht die effizientesten Methoden, die uns zur Verfügung stehen, da sie viel Speicherplatz beanspruchen und während der Implementierung viel Zeit in Anspruch nehmen.

Beachten Sie einige Dinge, die Ihnen bei der Entscheidung helfen können, ob die Wahl einer Rekursion für ein Problem der richtige Weg ist oder nicht. Sie sollten Rekursion wählen, wenn das Problem, das Sie lösen werden, rekursiv erwähnt wird und die rekursive Lösung weniger komplex erscheint.

Sie sollten wissen, dass die Rekursion in den meisten Fällen die Implementierung der Algorithmen vereinfacht, die Sie verwenden möchten. Wenn nun die mit der Verwendung von Iteration und Rekursion verbundene Komplexität für ein bestimmtes Problem gleich ist, sollten Sie sich für die Iteration entscheiden, da die Chancen, dass sie effizienter ist, höher sind.

Schauen Sie sich auch an: 23 beste Computerprogrammierkurse, um einen Job zu bekommen

Fazit

Es kann jedoch Situationen geben, in denen eine Entscheidung nicht so einfach ist. Sie müssen sich zwischen Effizienz und Einfachheit entscheiden. Wenn Sie ein erfahrener Designer sind, wissen Sie genau, wann Sie der Effizienz mehr Bedeutung beimessen müssen, und wenn Sie sich für Einfachheit oder Prägnanz entscheiden, ist dies der richtige Weg.

Wenn Sie mehr über Datenstruktur und Datenwissenschaft erfahren möchten, besuchen Sie das Executive PG Program in Data Science von IIIT-B & upGrad, das für Berufstätige entwickelt wurde und mehr als 10 Fallstudien und Projekte, praktische praktische Workshops und Mentoring mit der Industrie bietet Experten, 1-on-1 mit Mentoren aus der Branche, mehr als 400 Stunden Lern- und Jobunterstützung bei Top-Unternehmen.

Was ist die häufigste reale Anwendung der Rekursion?

Rekursion ist ein Prozess, bei dem sich die Funktion indirekt oder direkt selbst aufruft, um das Problem zu lösen. Die Funktion, die den Rekursionsprozess durchführt, wird als rekursive Funktion bezeichnet. Es gibt bestimmte Probleme, die mit Hilfe eines rekursiven Algorithmus ziemlich einfach gelöst werden können.

Die häufigste Anwendung der Rekursion im wirklichen Leben ist, wenn Sie berechnen, wie viel Geld Sie in einer mit Rs gefüllten Box haben. 100 Noten. Wenn es zu viele Notizen gibt, können Sie Ihren Freund bitten, die gleiche Arbeit zu erledigen, indem Sie den gesamten Stapel in zwei Teile teilen. Sobald Sie beide mit dem Zählen fertig sind, addieren Sie einfach beide Ergebnisse, um den Gesamtbetrag zu erhalten.

Welche Eigenschaften muss eine rekursive Funktion haben?

Eine rekursive Funktion kann als Endlosschleife fortgesetzt werden. Es gibt zwei Eigenschaften, die für jede rekursive Funktion definiert werden müssen, um zu verhindern, dass sie in eine Endlosschleife geht. Sie sind:

1. Basiskriterien – Es muss eine vordefinierte Basisbedingung geben. Immer wenn dieses Basiskriterium erfüllt ist, hört die Funktion auf, sich selbst aufzurufen.
2. Progressiver Ansatz – Die rekursiven Aufrufe sollten aus einem progressiven Ansatz bestehen. Immer wenn die Funktion rekursiv aufgerufen wird, sollte sie in der Nähe der Basisbedingung liegen.

Was sind die Vor- und Nachteile der Rekursion?

Einige der Vorteile der Rekursion bestehen darin, dass Sie in einer rekursiven Funktion nur die Basisbedingung und den rekursiven Fall definieren müssen. Dies macht den Code im Vergleich zu einem iterativen Code ziemlich einfach und kurz, und einige Probleme wie Tree Traversal und Graph sind von Natur aus rekursiv.

Die größten Nachteile der Rekursion sind der größere Platzbedarf für rekursive Funktionen im Vergleich zu einem iterativen Programm, da jeder Funktionsaufruf im Stack verbleiben muss, bis die Grundbedingung erfüllt ist, und auch der Zeitbedarf, da der Stack wächst nach jedem Funktionsaufruf, und die endgültige Antwort kann erst zurückgegeben werden, nachdem alle Elemente vom Stack entfernt wurden.