iterativ und rekursiv

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
knuffi123
User
Beiträge: 12
Registriert: Mittwoch 7. November 2007, 19:26

iterativ und rekursiv

Beitragvon knuffi123 » Mittwoch 14. November 2007, 22:32

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.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Beitragvon windner » Mittwoch 14. November 2007, 22:34

Der Code ist weder iterativ, noch rekursiv; da ist nämlich gar keine Schleife drin, weil du die Code-Tags nicht verwendet hast.
knuffi123
User
Beiträge: 12
Registriert: Mittwoch 7. November 2007, 19:26

Beitragvon knuffi123 » Mittwoch 14. November 2007, 22:39

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
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Mittwoch 14. November 2007, 22:39

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`?
BlackJack

Beitragvon BlackJack » Mittwoch 14. November 2007, 22:48

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)
knuffi123
User
Beiträge: 12
Registriert: Mittwoch 7. November 2007, 19:26

Beitragvon knuffi123 » Mittwoch 14. November 2007, 22:54

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...
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Mittwoch 14. November 2007, 23:01

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.
knuffi123
User
Beiträge: 12
Registriert: Mittwoch 7. November 2007, 19:26

Beitragvon knuffi123 » Mittwoch 14. November 2007, 23:12

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?
BlackJack

Beitragvon BlackJack » Donnerstag 15. November 2007, 01:58

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder