python fakultät programmieren?
für die fakultät einer zahl N. also N! quasi. wie würde das gehen? mein ansatz:
def funktion(N):
x = 1
for n in range(1,N)
x*=n
return x
5 Antworten
Der Ansatz ist nicht schlecht.
Kleiner Tipp:
Du kannst den vorherigen Wert in einer zweiten Variable speichern, mit dem aktuellen Wert der Laufvariable multiplizieren und dann die zweite Variable durch den nächsthöheren Wert ersetzen.
Oder auch rekursiv:
function factorial(n) {
if (n>1) {
return n*factorial(n-1);
} else if {
return 1;
}
}
Das würde es für jede beliebige Zahl 1 zurückgeben.
So sollte das laufen:
def faculty(n):
if n < 0: raise ValueError("n must be >= 0")
result = 1
for x in range(2, n + 1):
result *= x
return result
und warum muss ich 2 und n + 1 wählen? bei listen hab ich gemerkt, dass er die letzte zahl nie annimmt, also quasi wie ein offenes intervall...
ist das bei der anfangszahl auch so?
2 als Startwert, da 1*1 redundant wäre.
n+1 als "Endwert", da list(range(2,5)) = [2,3,4], wobei [2,3,4,5] für n=5 benötigt wird.
den teil if n < 0: raise ValueError("n must be >= 0") versteh ich nicht. ist das überhaupt nötig und was macht das?
Der Teil gibt einen Fehler aus wenn du faculty(0) oder faculty(-20) aufrufst...
Nicht ganz. faculty(0) gibt ordnungsgemäß den Wert 1 zurück. Nur für n<0 ist die Fakultät nicht definiert.
Wenn es eien Fingerübung ist:
import math
math.factorial(n)
Wenn die Implementierung selbst gemacht werden soll, dann gibt es einen ganzen Strauß an Ansätzen, Isendrak hat Dir bereits den iterativ imperativen Ansatz gezeigt.
Hier findest du ein iteratives und ein rekursives Beispiel in Java und Python: https://de.wikipedia.org/wiki/Fakult%C3%A4t_%28Mathematik%29#Numerische_Berechnung_und_N%C3%A4herung
edit: da sollte eigentlich x *= n stehen