Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

ice-cream

Junior Schreiberling

  • "ice-cream" is female
  • "ice-cream" started this thread

Posts: 237

Date of registration: Oct 29th 2009

1

Saturday, October 31st 2009, 9:56pm

Scheme Fragen über Fragen....

Leute kann mir jemand den unterschied zwischen iterativ und rekursiv idiotensicher erklären irgendwie verstehe ich es einfach nicht....

sos1981

Alter Hase

  • "sos1981" is male

Posts: 1,562

Date of registration: Oct 28th 2003

Location: Wolfsburg

Occupation: Testentwickler

2

Saturday, October 31st 2009, 10:29pm

Iterativ bedeutet, dass du die Lösung eines Problems durch einen Algorithmus ausdrücken kannst, der quasi "von oben nach unten" durchläuft, wohingegen rekursive Programme sich immer wieder selber aufrufen.

Hier mal je ein Beispiel, vlt. wird es dann deutlicher:
Es soll ein Programm geschrieben werden, dass die n. Fibonacci-Zahl berechnet. Diese berechnet sich, in dem man ihre beiden Vorgänger addiert. Also quasi 0, 1, 1, 2, 3, 5, 8, 13, ....

Source code

1
2
3
4
5
algorithm fibonacci_rekursiv (int n)
  if n < 2
     return n
  else
    return fibonacci(n-1) + fibonacci(n-2)


hier wird quasi der algorithmus immer wieder selbst in sich aufgerufen, solange, bis der letzte Aufruf ein Ergebnis zurückbekommt, mit dem gearbeitet werden kann. Danach wird das ganze Aufrufe-Geflächt von hinten her aufgerollt und man bekommt das gewünschte Ergebnis zurück.

Source code

1
2
3
4
5
6
7
8
9
algorithm fibonacci_iterativ (int n)
  int a = 0
  int b = 0
 while n>0 do
    int c = a
    a = b
    b=b+c
    n= n-1
return a


Hier sieht man schön, dass das Ergebnis am Ende durch eine Schleife innerhalb des hier-stehenden Algorithmus ermittelt wird. Der Algorithmus wird nur einmal aufgerufen (im Gegensatz zur rekursiven Variante) und liefert nach dem letzten Schleifendurchlauf sofort das gewünschte Ergebnis.

Ich hoffe es ist dir etwas klarer geworden. Wenn nicht, scheu dich nicht, nochmal zu fragen, denn das ist auch ziemlich schwer hier zu erklären. Vlt. hat ja jemand noch eine andere Variante, um das besser zu verdeutlichen.

VG
Florian
Der Einzigste ist noch viel einziger als der Einzige!

This post has been edited 2 times, last edit by "sos1981" (Oct 31st 2009, 10:30pm)


DrChaotica

Senior Schreiberling

  • "DrChaotica" is male

Posts: 714

Date of registration: Jan 22nd 2005

Location: SHG

Occupation: SW-Entwickler

3

Saturday, October 31st 2009, 11:04pm

Stell Dir vor, Du willst einen Einkauf erledigen. Angenommen, Du hast leider ein totales Kurzzeitgedächtnis, so dass Du nach 5 min nicht mehr wüsstest, was Du eigentlich haben willst.
Was machst Du?
Genau! Du klonst Dich, erzählst schnell Deinem Klon die Liste mit den Gegenständen, die Du haben willst, bis auf einen Gegenstand. Den kaufst Du.
Dummerweise hat Dein Klon dasselbe Gedächtnisproblem, also sagst Du ihm, dass er es genauso machen soll. Weiterklonen!

Alle Klone gehen dann jeweils einen Gegenstand einkaufen, wenn sie wieder zuhause sind legen sie's zusammen und Du hast Deinen Kram.
Freu Dich, und puste die Freaks weg.
->Das wäre ein rekursives Vorgehen!

Alternativ könntest Du Dir einfach ne Liste schreiben, und wie jeder normale Mensch damit alle darauf stehenden Gegenstände (+-Chips und Schokolade) einkaufen.
->Das wäre ein iteratives Vorgehen!

Merke: Jeder rekursive Vorgang kann in einen iterativen überführt werden, indem man alles was man noch tun muss auf eine Liste schreibt, und diese dann abarbeitet.
Zweite Beobachtung: Rekursive Vorgänge erzeugen meist einen größeren Aufwand, sind dafür aber ungemein cooler. Wissenschaftler stehen deshalb voll darauf.

(Wenn Du das jetzt verwirrend findest, hör lieber auf die vernünftigen Menschen.)

This post has been edited 1 times, last edit by "DrChaotica" (Oct 31st 2009, 11:06pm)


Ivan

Trainee

Posts: 80

Date of registration: Oct 10th 2004

4

Saturday, October 31st 2009, 11:06pm

hi,

eben beim googeln das hier gefunden...denke das 1.beispiel z.b. mit dem pizzaessen ist net schlecht...
iterativ_vs_rekursiv

bye

ice-cream

Junior Schreiberling

  • "ice-cream" is female
  • "ice-cream" started this thread

Posts: 237

Date of registration: Oct 29th 2009

5

Monday, November 2nd 2009, 5:02pm

Was passiert eigentlich wenn man in scheme die 50 prozent anzahl der übungen nicht erreicht?
man darf nicht an der prüfung teilnehmen das ist klar aber könnte man sein studium theoretisch fortsetzen und im nächsten wintersemester wieder scheme belegen?

Panoramix

Trainee

Posts: 115

Date of registration: Sep 12th 2008

6

Monday, November 2nd 2009, 5:12pm

Bei uns ist in keinem Fach das Bestehen eines anderen Faches "Zugangsvoraussetzung". Wenn Du lustig bist, dann könntest Du alle Prüfungen im 6 Semester schreiben ... :D (ok, Scheme gerade nicht, weil es die Prüfung dazu ja immer nur im WS gibt ...)

Und zum Thema 50% nicht erreichen: Im letzten Jahr (und mit Sicherheit auch in den Jahren davor) gab's am Ende noch ein Bonus-Blatt, dessen Punkte man wie man wollte auf die zwei Blöcke verteilen konnte.

Viele Grüße
Carsten

This post has been edited 1 times, last edit by "Panoramix" (Nov 2nd 2009, 5:13pm)


hyperion

Erfahrener Schreiberling

  • "hyperion" is male

Posts: 422

Date of registration: Oct 8th 2004

7

Tuesday, November 3rd 2009, 12:20am

Was passiert eigentlich wenn man in scheme die 50 prozent anzahl der übungen nicht erreicht?
man darf nicht an der prüfung teilnehmen das ist klar aber könnte man sein studium theoretisch fortsetzen und im nächsten wintersemester wieder scheme belegen?


Ich würde mir um die 50% jetzt noch keine Sorgen machen. Es läuft gerade erst die dritte Übung. Macht euch da keinen Stress. Ausserdem gibt es, wie schon erwähnt, Bonusblätter.

Solange ihr am Ball bleibt, sind die 50% kein Problem.
"Der Klügere gibt nach! Eine traurige Wahrheit, sie begründet die Weltherrschaft der Dummheit." --Marie von Ebner-Eschenbach

ice-cream

Junior Schreiberling

  • "ice-cream" is female
  • "ice-cream" started this thread

Posts: 237

Date of registration: Oct 29th 2009

8

Tuesday, November 10th 2009, 6:30pm

Leute hab gehört das herr parchmann ein skript für seine vorlesung hatte den er in den letzten jahren erstellt hat weis zufällig jemand wo ich den finde?

Bastian

Dies, das, einfach so verschiedene Dinge

Posts: 988

Date of registration: Sep 30th 2007

vince

Trainee

  • "vince" is male

Posts: 58

Date of registration: Sep 30th 2009

Location: Über den Wolken

10

Wednesday, November 11th 2009, 9:05am

Hi,


bezüglich der aktuellen Hausübung.
In A1 sollten wir die Lambda Ausdrücke angeben.

Wenn ich das richtig gesehen habe, dann hat der Prof. an die Tafel gezeichnet, dass ein let so geschrieben werden kann :

Source code

1
(lambda(var1 var2 ... varn
und ein let * so :

Source code

1
(lambda var1 (lambda var2 ...(lambda varn 


Das ist auch schön und gut, aber wenn ich den Makro Stepper aufrufe, dann wird das zwar in eine lambda Konstruktion übersetzt, aber das let bleibt erhalten.

Source code

1
(lambda (var1) (let

Source code

1
(lambda (var1 var2) (let*



Macht es sich jetzt der Makro Stepper zu einfach :rolleyes: oder muss/kann das let doch nicht in die lambda Form umgeschrieben werden ?
Dieser Beitrag wurde bereits 2000 mal editiert, zuletzt von »vince« (Gestern, 11:11)

  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

11

Wednesday, November 11th 2009, 11:37am

Was ist denn der Makro Stepper und wieso interessiert es dich, was er macht? (wenn ich auf Makro Stepper klicke erscheint übrigens eine Fehlermeldung und ein neues Fenster in dem immer noch ein let steht und kein lambda)

Quoted

[...]oder muss/kann das let doch nicht in die lambda Form umgeschrieben werden ?
Ich glaube in der Aufgabe geht es darum zu verstehen, dass das let-Konstrukt nichts weiter ist als "syntaktischer Zucker", wie Herr Parchmann es so gerne nennt. Also um deine Frage zu beantworten: Jedes let und jedes let* lässt sich so umschreiben, dass es nur aus lamda-Ausdrücken besteht und trotzdem noch genau so funktioniert wie vorher. Der einzige Unterschied ist, dass die lambda-Ausdrücke weniger hübsch und übersichtlich sind.

Wie genau DrScheme (oder der Makro Stepper) das nun umsetzt ist dabei ja eigentlich eher weniger von Belang.

vince

Trainee

  • "vince" is male

Posts: 58

Date of registration: Sep 30th 2009

Location: Über den Wolken

12

Wednesday, November 11th 2009, 11:49am

Das mit dem "syntaktischen Zucker" ist mir schon klar.

Es geht mir darum das gesagt wurde, dass wenn man den MacroStepper startet, man genau sieht, was Scheme im Hintergrund aus dem "Syntaktischen Zucker" macht.

Nur wird ein let im MacroStepper in "(lambda ... (let" umgewandelt. Deswegen bin ich etwas irritiert, da der MacroStepper ( gesagt in der Übung oder Vorlesung) eigentlich alle Ausdrücke in die unspünglichste Form umwandeln sollte.

Deswegen sollte der Ausdruck ja nur aus lambda Ausdrücken bestehen, was er aber nicht tut :|

Die Frage ist beantwortet. Dann is der MacroStepper Müll.
Dieser Beitrag wurde bereits 2000 mal editiert, zuletzt von »vince« (Gestern, 11:11)

This post has been edited 1 times, last edit by "vince" (Nov 11th 2009, 11:51am)