Ich hatte das für eine Interviewfrage und ich konnte es nicht lösen. Ich habe gesessen und darüber nachgedacht, aber ich kann mir immer noch nicht vorstellen, wie ich es machen soll.
Ich habe 3 Methoden. Ich nehme an, dass zwei Zahlen durch Rekursion addiert werden, so dass ich keine arithmetischen Operatoren wie +, -, etc. Verwenden kann.
Die 3 Methoden sind Sum, Add1, Sub1.
Add1 nimmt 1 Integer als Parameter und gibt diese ganze Zahl mit einem Inkrement von 1 zurück. Sub1 macht dasselbe, aber dekrementiert 1.
Die Sum-Methode benötigt 2 ganze Zahlen und verwendet Rekursion, um die Summe der 2 ganzen Zahlen zurückzugeben. Zeigen Sie die Implementierung.
Außerdem können Sie mit der Sum-Funktion eine neue Funktion implementieren, die 2 ganze Zahlen als Eingabe verwendet und ihr Produkt mit Rekursion, aber ohne arithmetische Operatoren ausgibt?
In beiden Fällen sind die ganzen Zahlen nicht negativ.
Dies ist in der Tat, wie natürliche Zahlenarithmetik von den ersten Prinzipien definiert wird; siehe Ссылка
Machen wir das von Grund auf, warum nicht wir?
Einfach gemacht:
%Vor%Alles klar, wir können jede beliebige Integer darstellen. Jetzt, wie machen wir Addition? Wir definieren die Addition als:
%Vor%Also fügen wir einen Operator hinzu
%Vor%Alles klar, versuchen wir es.
%Vor%Und da gehen Sie, zwei plus zwei sind tatsächlich vier.
Wenn dieses Thema Sie interessiert, führe ich derzeit eine lange Reihe auf meinem Blog über natürliche und ganzzahlige Arithmetik von Grund auf, obwohl ich eine binäre Darstellung anstelle einer unären Darstellung verwende. Siehe
Ganz allgemein: Die Frage soll testen, ob Sie die Grundstruktur einer rekursiven Methode kennen; vielleicht lässt du mich das nicht für dich auslegen. Rekursive Methoden in C # folgen alle diesem Muster:
Das machen wir im Additions-Operator. Wir prüfen zuerst, ob wir die Lösung des Problems kennen; a + 0 ist ein. Wenn wir die Lösung des Problems nicht kennen, machen wir ein kleineres Problem; Wenn wir den Vorläufer des zweiten Summanden nehmen, sind wir einem Problem, das wir zu lösen wissen, einen Schritt näher.
Hmm .. versuchen sie schlechte Programmierer einzustellen? In jedem Fall könnte getan werden, indem die Funktion sum seine zweiten Argumente nimmt, add / decrement 1 und sich selbst aufruft.
%Vor% Sie können diese Klasse einfach auf einfache Weise implementieren und sie wird für jeden Typ T
funktionieren.
Also für Ints (oder wahrscheinlich uints) würde es ungefähr so sein:
%Vor%Tags und Links c#