Die Wikipedia-Artikel sind zu weit fortgeschritten, als dass ich sie verstehen könnte. Könnte mir bitte jemand eine einfache Erklärung geben?
terminology
recursion
Schädelpatrol
quelle
quelle
recursion
bezieht sich auf eine Funktion, die sich selbst aufruft, währendself-reference
sich auf ein Objekt bezieht, das auf sich selbst verweist.Antworten:
Der Kontext der beiden Begriffe ist im Allgemeinen unterschiedlich.
Selbstreferenzierung erfolgt im Kontext von Daten - Sie haben einen Datentyp, der einen Verweis auf etwas vom gleichen Typ enthält.
Rekursiv ist im Kontext von Code - Sie haben eine Funktion oder Prozedur, die sich selbst aufruft.
Beispiel:
quelle
Hier ist eine rekursive Funktion (in C):
Diese beiden Aufrufe
fibonacci()
innerhalb derfibonacci()
Funktion sind rekursive Aufrufe.Hier ist eine selbstreferenzielle Datenstruktur :
Das erste Element
data
ist nur ein Zeiger auf eine Art von Daten. Das zweite Elementnext
ist ein Zeiger auf eine andereListNode
Struktur. Wenn Sie zwei oder mehrListNode
Strukturen haben, können Sie dennext
Zeiger von einer auf die Adresse einer anderen usw. setzen, und Sie haben dann eine verknüpfte Liste . Die Struktur ist selbstreferenziell, da sich die Definition der Struktur auf sich selbst bezieht. Wenn du wirklich verrückt werden willst, kannst du das tun:Jetzt haben Sie eine andere Art von Selbstreferenz - es ist nicht nur die Definition
struct ListNode
, die sich auf sich selbst bezieht ... Sie haben dennext
Zeiger gesetztnode
, um auf sichnode
selbst zu zeigen. Dies ist eine zirkuläre verknüpfte Liste, die nur ein Element enthält. Süß, aber nicht sehr nützlich. Ich erwähne es, weil es eine Art Selbstreferenz ist, aber es ist nicht das, was Menschen normalerweise meinen, wenn sie über selbstreferenzielle Datentypen sprechen.quelle
Es wird erwartet, dass Rekursionen, meistens nützliche, nach einer bestimmten Anzahl von Prozeduren in dem Sinne beendet werden, dass es einen Anfangswert gibt. es sei denn, Sie haben eine schlechte Rekursion, die nutzlos ist.
Selbstreferenzen sind an sich keine rekursiven Rekursionen, es kann jedoch gezeigt werden, dass sie rekursiv sind. In diesem Fall werden sie im Allgemeinen nie beendet.
quelle
Rekursion impliziert Aktion.
Beispiele:
Technisch gesehen sollte die Rekursion einen Exit-Status haben, dies ist jedoch keine Voraussetzung.
Selbstreferenz impliziert Struktur.
Ex. Eine Instanzmethode, die auf das Objekt verweist, an das sie angehängt ist.
quelle
Für die Rekursion muss etwas verarbeitet werden, indem derselbe Prozess aufgerufen wird (häufig mit unterschiedlichen Parametern). Obwohl Sie häufig Funktionen verwenden und diese Funktionen sich selbst aufrufen, treten sie technisch in einen neuen Schritt ein, der zufällig wie der Ort aussieht, von dem sie gerade gekommen sind.
Selbstreferenz bedeutet, dass sich etwas auf sich selbst bezieht. Klassen können mithilfe von selbstreferenziell sein
this
, aber das ist nicht sinnvoll rekursiv.quelle