Normalerweise mache ich es sowas:
Code: Alles auswählen
def fakultaet(n):
if n == 0 : return 1
else: return fakultaet(n-1)
Wie kann ich dieses Problem verhindern?
Code: Alles auswählen
def fakultaet(n):
if n == 0 : return 1
else: return fakultaet(n-1)
Code: Alles auswählen
factorial n = foldr (*) 1 [1..n]
Code: Alles auswählen
from operator import mul
def factorial(n):
return reduce(mul, xrange(1,n+1))
Du musst sie sogar noch an viel mehr Stellen umbenennen, nämlich überall da wo du sie benutzt. Da hilft nur eins: Keine Funktionen verwenden. Aber ob das dann noch DRY ist…bastian.weber hat geschrieben:Was mich aber daran stört ist, dass ich wenn ich die Funktion umbenenne, dies an zwei Stellen tun muss, und dabei bestimmt die innere vergesse.
Ja, in Clojure gibt es da als Krücke ``recur``, aber das ist weniger als DRY-Gründen sondern eher um den Compiler einfach zu halten.BlackJack hat geschrieben:@bastian.weber: Solange eine Sprache nicht ein Symbol anbietet was immer gleich bleibt und sich auf die aktuelle Funktion bezieht, denke ich kann man das nicht verhindern.