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