Gepostet: |
Endrekursiv | ||||||||||
hey, ich bin's mal wieder ;) also ich sollte halt mehrere Funktionen schreiben, aber weiß nicht wie man so wirklich endrekursiv macht?! z.b. ich habe "summeVonBis" dann hab ich erstmal so programmiert und soll mir danach überlegen mit endrekursiv (?): summeVonBis a b |a==b = b |otherwise = a + summeVonBis (a+1) b wäre schön, wenn du mir es kurz erklären könntest wie ich solche funktionen endrekursiv machen kann? danke schön fürs lesen und helfen wünsch dir noch ein schönes wochenende |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich hab gerade mal versucht für summeVonBis endrekursiv zu schreiben, aber irgendein fehler ist noch drin oder alles falsch... vonbis a b = vonbis1 a b vonbis1 0 0 akku = akku vonbis1 a b akku |a==b = vonbis1 (akku+b) |otherwise = vonbis1 a b (akku:a) b |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
also ich verrat dir erstmal wofür endrekursion gut ist...;-) man braucht endrekursion weil rekursive funktionen platz auf dem stack benötigen...deshalb wandelt man rekursive funktionen in endrekursive um... also mußt du dir das ganze nur wie ne while schleife vorstellen summevonbis a b= vonbis1 a b 0 where in der ersten zeile rufst du immer deine hilfsfunktion auf ...mit dem acc auf 0 ...(oder eben mit acc auf 1 wenn du multiplizierst) und dann kommt die richtige funktion.. bin mir nicht ganz sicher ob das geht...;-) probiers mal aus...er wirft zumindest keinen fehler... gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
danke, echt sorry, wenn ich damit nerve ok muss ich morgen nochmal versuchen mit den anderen aufgaben. aber eigentlich müsste doch summeVonBis das gleiche rauskommen wie beim endrekursiven oder? z.b. ich rufe summeVonBis 4 8 auf kriege 30 raus und mitm endrekursiven Darstellung 4 8 kriege ich 22 raus so kann es doch nicht richtig sein oder? und noch ne frage halt, ob ich das richtig verstanden habe mit endrekursiv schreiben: nmal a 0 = [] nmal a n = nmal1 a n 0 nmal1 a n acc = nmal1 (a+acc)(n-1)(n-acc) so etwa? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
summevonbis a b= vonbis1 a b 0 where nein das geht so nicht wie du das schreibst...du mußt in der hauptfunktion die unterfunktion das erste mal aufrufen so wie bei mir in der ersten zeile...;-) hab vergessen die letzte zahl dazuzuaddieren... nmal a n = nmal1 a n [] where so müßte das gehen... |
|||||||||||
Zum Seitenanfang | |||||||||||