Diese Frage ist allgemein, aber ich denke, dass es am besten mit einem bestimmten Beispiel erklärt wird. Nehmen wir an, ich habe ein Verzeichnis mit vielen verschachtelten Unterverzeichnissen und in einigen dieser Unterverzeichnisse gibt es Textdateien, die mit ".txt" enden. Eine Probe Struktur könnte sein:Behalten der Stapelposition einer rekursiven Funktion zwischen Aufrufen
dir1
dir2
file1.txt
dir3
file2.txt
file3.txt
ich interessieren würde, wenn es eine Möglichkeit, in Java ist, ein Verfahren zu entwickeln, die die aufeinanderfolgenden Textdateien bezeichnet werden könnten zurückkehren:
TextCrawler crawler = new TextCrawler(new File("dir1"));
File textFile;
textFile = crawler.nextFile(); // value is file1.txt
textFile = crawler.nextFile(); // value is file2.txt
textFile = crawler.nextFile(); // value is file3.txt
Hier Die Herausforderung: Keine interne Liste aller Textdateien kann im Crawler-Objekt gespeichert werden. Das ist trivial. In diesem Fall würden Sie einfach in die Initialisierung eine Methode einbauen, die rekursiv die Liste der Dateien erstellt.
Gibt es einen allgemeinen Weg pausiert eine rekursive Methode, so dass, wenn es erneut aufgerufen wird, es zu dem bestimmten Punkt im Stapel zurückkehrt, wo es übrig? Oder müssen wir etwas schreiben, das für jede Situation spezifisch ist und die Lösungen notwendigerweise für Datei-Crawler, Organigramm-Suchen, rekursive Prime-Finder usw. variieren müssen?
Sie möchten also, dass diese 'nextFile() 'Methode einen Zustand ohne einen Zustand hat? –
Rekursive Funktionen haben normalerweise referenzielle Transparenz. Alles, was Sie tun müssen, ist, denselben Parameter zu geben, und es wird die gleiche Operation ausführen. – 4castle
@ tirpitz.verus Ich denke, er möchte, dass ein Objekt 'Crawler' in der Lage ist, eine generische Zustandsinformation zu speichern, die wiederverwendet werden kann, wenn die rekursive Suche eingegeben wird. – Vesper