2017-12-03 9 views
-1

ich folgende AusgängeNeu-Programmierung: Ausgabe in eine rekursive Funktion

whoknows(2) = 
whoknows(15) = 
whoknows(-3) = 


void whoknows(const int x) { 
    if (x < 2) { 
     print(x); 
    } else { 
     const int y = x/2; 
     whoknows(y); 
     print(x % 2); 
    } 
} 

ich herauszufinden versuche, bin nicht sicher, ob ich die richtige Antwort, hier mein Verständnis dieser Funktion ist.

Die Funktion whoknows (const int x) "wird als Rückgabetyp void deklariert, was bedeutet, dass die Funktion keinen Wert zurückgibt. Der Ausdruck (const int x) gibt an, dass die Änderungen nicht über die lokale Variable in der Funktion hinausgehen. Dies ist eine rekursive Funktion, weil sie sich selbst in der Funktion aufruft. Die Basisbedingung der Rekursion ist x < 2. Sie verwendet das Konstrukt if ... else als bedingte Anweisungen, um den Code auszuführen. Hier wird x durch die Funktion geleitet, und wenn der Wert kleiner als 2 ist, wird einfach der Wert ausgegeben. Wenn nicht, dann wird es durch die else-Funktion gehen, wo es durch 2 geteilt wird und dann wird der neue Wert für die Standardbedingung getestet. Die Standardbedingung wird solange getestet, bis sie erfüllt ist, wobei jede Rekursion x durch 2 dividiert. Dann wird x durch print (x% 2) gehen und der Rest wird immer x sein, da zu diesem Zeitpunkt die Zahl immer kleiner als zwei ist (Grundbedingung der Rekursion.)

Bisher glaube ich, die Ergebnisse

whoknows sein @ 2 1,1
whoknows ist @ 15 1,875 ist, 1,875
whoknows @ -3 -3

Sehr geschätzt, wenn jemand mich wissen lassen könnte, ob meine Logik und Ergebnisse OK sind und warum. Ich habe eine harte Zeit mit dieser Art von Funktionen.

+1

Ihre Logik ist korrekt, Sie haben nur ein Problem mit dem zweiten Fall. Die Linie const int y = x/2; ist INTEGER division was bedeutet, dass Sie nur den ganzzahligen Teil auf Division erhalten, Beispiel: 15/2 = 7 nicht 7,5 –

+0

Vielen Dank! Das habe ich übersehen. Ist in diesem Fall whoinks (15) = 1,1, weil nur die ganzen Zahlen gedruckt werden? Danke für die Hilfe – ronan2146

Antwort

2

Diese Funktion druckt die Basis 2-Darstellung der Nummer. Zum Beispiel, wer (15) druckt 1111 und wer weiß (13) druckt 1101 und so weiter. Die Logik dahinter ist einfach, jedes Mal, wenn die Methode das am weitesten rechts liegende Bit findet (x% 2) und die Zahl nach rechts verschiebt (mit x/2) und die Prozedur wiederholt, bis alle Bits aufgerufen sind.