12.01.2014 Aufrufe

2-up - ETH Zürich

2-up - ETH Zürich

2-up - ETH Zürich

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Ist Dekrementieren elementar?<br />

• Kann man einer Maschine, die nur Vorwärtszählen („incr“)<br />

kann, das Rückwärtszählen „per Programm“ beibringen?<br />

• Ja, wir benutzen dazu eine rekursive Hilfsmethode h:<br />

static int h(int x, int y){<br />

if (x == incr(y)) return y;<br />

else return h(x, incr(y));<br />

}<br />

Bei y x terminiert<br />

die Methode nicht;<br />

das ist für unseren<br />

Zeck aber irrelevant<br />

• Ein Aufruf h(5, 4) liefert offenbar 4<br />

• Allgemein: h(u, u-1) liefert u-1<br />

• Der Aufruf h(5, 3) führt zu h(5, 4) in der Rekursion<br />

• Also liefert h(u, 0) schliesslich h(u, u-1) = u-1 (für u > 0)<br />

77<br />

Ist Dekrementieren elementar? (2)<br />

• Wegen h(u,0) = u-1 lässt sich decr (für z ∈ G 0 ) so definieren:<br />

static int decr(int z)<br />

if (z == 0) return 0;<br />

return h(z,0);<br />

}<br />

• Rückwärtszählen lässt sich durch Vorwärtszählen „simulieren“<br />

bzw. implementieren!<br />

• Erstaunlich?<br />

• Fragestellung der theoretischen Informatik: Was muss ein<br />

Computer („in Hardware“) nur mindestens können, damit<br />

er als „Universalrechner“ funktioniert?<br />

78<br />

31

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!