Seite 1 von 1
iterativ und rekursiv
Verfasst: Mittwoch 14. November 2007, 22:32
von knuffi123
Hallo an alle.
Ich habe eine Frage zu folgendem Code:
Code: Alles auswählen
n = input("Bitte machen sie eine Eingabe: ")
def f(n):
while n > 1:
return (n-2)*(n-1)-10
while n < 2:
if n == 1:
return 3
elif n == 0:
return 2
n = n + 1
print f(n)
Ist dieser iterativ oder rekursiv?
Wenn er rekursiv ist dann verstehe ich nicht genau warum:(
Vielen Dank
Edit (BlackJack): Code-Tags gesetzt.
Verfasst: Mittwoch 14. November 2007, 22:34
von windner
Der Code ist weder iterativ, noch rekursiv; da ist nämlich gar keine Schleife drin, weil du die Code-Tags nicht verwendet hast.
Verfasst: Mittwoch 14. November 2007, 22:39
von knuffi123
windner hat geschrieben:Der Code ist weder iterativ, noch rekursiv; da ist nämlich gar keine Schleife drin, weil du die Code-Tags nicht verwendet hast.
In Python funktioniert der Code bzw. die Schleife?
Wenn ich zb. -10 eingebe dann fügt er immer 1 hinzu und lässt neu durchlaufen, bis er bei 0 ankommt. somit gibt er wieder eine 2 aus...
Was genau sind code tags?
Hättest du einen tip wie ich den code iterativ gestallten kann?
Danke
Verfasst: Mittwoch 14. November 2007, 22:39
von Y0Gi
Da die Funktion `f()` nicht aus ihrem eigenen Rumpf heraus ausgerufen wird, ist der Code nicht rekursiv.
Die `while`-Scheife zu Beginn des Rumpfes macht mich etwas stutzig. Wenn darin sowieso zurückgegeben wird, reicht dann nicht ein `if`?
Verfasst: Mittwoch 14. November 2007, 22:48
von BlackJack
Die Funktion ist in der Tat etwas eigenartig und kann so geschrieben werden:
Code: Alles auswählen
def f2(n):
if n > 1:
return (n - 2) * (n - 1) - 10
else:
return 2 + int(n == 1)
Verfasst: Mittwoch 14. November 2007, 22:54
von knuffi123
BlackJack hat geschrieben:Die Funktion ist in der Tat etwas eigenartig und kann so geschrieben werden:
Code: Alles auswählen
def f2(n):
if n > 1:
return (n - 2) * (n - 1) - 10
else:
return 2 + int(n == 1)
Ist dein Code rekursiv oder oder iterativ?
Mir geht es einfach darum das ich die Unterscheidung begreife...
Verfasst: Mittwoch 14. November 2007, 23:01
von BlackVivi
knuffi123 hat geschrieben:BlackJack hat geschrieben:Die Funktion ist in der Tat etwas eigenartig und kann so geschrieben werden:
Code: Alles auswählen
def f2(n):
if n > 1:
return (n - 2) * (n - 1) - 10
else:
return 2 + int(n == 1)
Ist dein Code rekursiv oder oder iterativ?
Mir geht es einfach darum das ich die Unterscheidung begreife...
Gar nichts von dem. Oder siehst du'ne Schleife?
Rekursiv --> sich selbst aufrufend.
Iterativ ---> Wiederholend
Code: Alles auswählen
def fakultaet(x):
if x > 1:
return x * fakultaet(x - 1)
else:
return 1
Das ist'ne rekursive Funktion.
Verfasst: Mittwoch 14. November 2007, 23:12
von knuffi123
Ok vielen Dank langsam begreife ich es.
Mein Code oben war falsch ich habe etwas vergessen:
Code: Alles auswählen
n = input("Bitte machen sie eine Eingabe: ")
def f(n):
if n == 0:
return 2
elif n == 1:
return 3
elif n > 1:
return f(n-2)*f(n-1)-10
print f(n)
Wenn ich es richtig verstanden habe ist dieser code rekursiv da ich f aufrufe?
Verfasst: Donnerstag 15. November 2007, 01:58
von BlackJack
Richtig, das ist rekursiv. Eine iterative Variante der Funktion sieht so aus:
Code: Alles auswählen
def f2(n):
a, b = 2, 3
for dummy in xrange(n):
a, b = b, a * b - 10
return a