Betrachten wir eine Funktion f (x, y):Hilft das Verwenden von funktionalen Sprachen gegen die wiederholte Berechnung von Werten?
f(x,0) = x*x;
f(0,y) = y*(y + 1);
f(x,y) = f(x,y-1) + f(x-1,y);
Wenn man die rekursiv in einer Sprache wie C++ zu implementieren versucht, wird er auf ein Problem stoßen.
Angenommen, die Funktion wird zuerst mit x = x0
und y = y0
aufgerufen. Dann werden für jedes Paar (x, y), bei dem 0 <= x < x0
und 0 <= y < y0
die Zwischenwerte mehrfach berechnet werden - rekursive Aufrufe bilden einen riesigen Baum, in dem mehrere Blätter tatsächlich die gleichen Paare (x, y) enthalten. Für Paare (x, y), bei denen x und y beide nahe bei 0 liegen, werden Werte mehrfach berechnet.
Zum Beispiel habe ich eine ähnliche Funktion in C++ getestet - für x=20
und y=20
ihre Berechnung dauert etwa 4 Stunden (ja, vier Stunden Erde!).
Offensichtlich kann die Implementierung so umgeschrieben werden, dass wiederholte Berechnungen nicht auftreten - entweder iterativ oder mit einer Cache-Tabelle.
Die Frage ist: Werden funktionale Sprachen besser und vermeiden wiederholte Berechnungen bei der rekursiven Implementierung einer Funktion wie oben?
Es ist auf der Implementierung abhängt. Dies ist in funktionalen Sprachen nicht wesentlich schneller. Das heißt, ich denke, es ist möglich, eine solche Optimierung in einer funktionalen Sprache zu implementieren, aber ich kenne die Einzelheiten nicht, deshalb werde ich keine konkrete Antwort geben. –