Addition zweier Zahlen durch einen Algorithmus

Ich steh vor folgendem Problem:
Ich soll einen Algorithmus schreiben der zwei beliebige positive natürliche Zahlen addiert und das Ergebnis ausgibt. Das Problem dabei ist, dass ich zur Berechnung nur folgende Operationen zur berechnung benutzen darf:

n = a Zuweisung: n erhält den Wert von a
n = n + 1
n = n - 1
a == b
a != b
if
while

Ich kriegs damit nicht hin. Jemand von euch ne Ahnung?

n1 = a // erster Summand
n2 = b // zweiter Summand
n3 = 0

while n3 != a
    n2 = n2 + 1
    n3 = n3 + 1
end // Ende der while-Schleife

// n2 ist jetzt die Summe von a und b

es läuft wohl darauf hinaus b mal n=n+1 (auch als increment bekannt) zu rechenen, nachdem a in n gespeichert wurde.

[edit] mist, zu langsam…
;o)

bye
TT

Okay, danke für die Antworten, haben mir sehr weitergeholfen. :slight_smile:
Eigentlich ja ganz einfach, nur manchmal hat man einfach ein Brett vorm Kopf >.>

MfG

Nachdem die Lösung vorgekaut wurde: Versuch’ mal, das rekursiv zu implementieren.

Es gibt nen Trick dabei. 1. Man sieht das erhöht/verringert (und verglichen) werden kann, 2… den behalt ich für mich, 3. Analogie/Gleichnis mit Stock und Wolle. Grüße an TO.

Edit: Die Laufzeit wäre ja n (wenn n die Größe der größeren natürlichen Zahl ist).

Die Lösung von Hoax kann noch vereinfacht werden:

n1 = a // erster Summand
n2 = b // zweiter Summand

while n1 != 0
    n1 = n1 - 1
    n2 = n2 + 1
end 

// n2 ist jetzt die Summe von a und b

Hier kann man auch gut die Invariante erkennen: Die Gesamtsumme bleibt bei jedem Schleifendurchlauf gleich. Deshalb muss, wenn man n1 auf 0 heruntersubtrahiert hat, am Ende alles in n2 stecken. Diese Idee kann man auch recht einfach rekursiv formulieren:

function summe(n1, n2)
   if n1 == 0 
      return n2
   else
      return summe(n1-1, n2+1)
end