


C++-Programm zum Konvertieren von Binärzahlen in Gray-Code mithilfe von Rekursion
Gray-Code oder reflektierter Binärcode ist eine spezielle Art der binären Darstellung von Zahlen, bei der sich zwei aufeinanderfolgende Werte nur in einem Bit unterscheiden. Die binären Äquivalente von 1 und 2 sind beispielsweise 01 und 10, wobei sich zwei Bits ändern. Aber im Gray-Code ist 1 01, 2 11 und nur ein Bit ändert sich. In diesem Artikel erfahren Sie, wie Sie mithilfe der Rekursion in C++ eine bestimmte Binärzahl in ihr Gray-Code-Äquivalent konvertieren.
Zahlen als Dezimalzahlen übergeben
Im ersten Beispiel geben wir Dezimalzahlen an. Die Zahlen sind nur 0 und 1, aber die Zahlen sind dezimal. Wenn wir beispielsweise 6 als Eingabe übergeben möchten, übergeben wir 110 (einhundertzehn in Dezimalzahl), was 6 in Binärform entspricht. Das Programm gibt die Ausgabe auf ähnliche Weise zurück.
Algorithmus
- Definieren Sie eine Funktion „solve()“, die eine Binärzahl akzeptiert
- Wenn n 0 ist, dann
- 0 zurückgeben
- Wenn es endet
- Last := die letzte Ziffer von n
- second_last = vorletzte Ziffer von n
- Wenn die letzte Ziffer und die vorletzte Ziffer unterschiedlich sind, dann
- Geben Sie 1 ein und rufen Sie „solve(n cuts last bit)“ auf
- Sonst
- Geben Sie 0 ein und rufen Sie „solve“ auf (n schneidet das letzte Bit ab)
- Wenn es endet
- solve()-Funktion endet
Beispiel
#include <iostream> using namespace std; int solve( int n ) { if( n == 0 ) return 0; int last = n % 10; int second_last = (n / 10) % 10; if( (last && !second_last) || (!last && second_last) ) { return (1 + 10 * solve( n / 10 )); } return (10 * solve( n / 10 )); } int main() { cout << "Gray code for the number 2 (10) is: " << solve( 10 ) << endl; cout << "Gray code for the number 6 (110) is: " << solve( 110 ) << endl; cout << "Gray code for the number 13 (1101) is: " << solve( 1101 ) << endl; cout << "Gray code for the number 93 (1011101) is: " << solve( 1011101 ) << endl; }
Ausgabe
Gray code for the number 2 (10) is: 11 Gray code for the number 6 (110) is: 101 Gray code for the number 13 (1101) is: 1011 Gray code for the number 93 (1011101) is: 1110011
Fazit
Gray-Code oder reflektierter Binärcode können durch Anwenden einer XOR-Operation auf aufeinanderfolgende Bits gefunden werden. Das Gleiche wird erreicht, indem man die letzten beiden Ziffern der angegebenen Zahl nimmt und, wenn sie nicht identisch sind, die Funktion rekursiv aufruft und die Zahl mit Ausnahme der letzten Ziffer übergibt. Das Ergebnis wird mit 1 verkettet, andernfalls mit 0 usw. Und bald. Im Beispiel haben wir die Eingabe als Ganzzahl-Dezimalzahl bereitgestellt und die Ausgabe erfolgt ebenfalls im Ganzzahl-Dezimalformat. Das gleiche Problem kann gelöst werden, indem eine Zeichenfolgeneingabe verwendet wird, die bei Bedarf zur Bereitstellung größerer Eingaben verwendet werden kann.
Das obige ist der detaillierte Inhalt vonC++-Programm zum Konvertieren von Binärzahlen in Gray-Code mithilfe von Rekursion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Rekursionstiefe von C++-Funktionen ist begrenzt und das Überschreiten dieser Grenze führt zu einem Stapelüberlauffehler. Der Grenzwert variiert je nach System und Compiler, liegt aber meist zwischen 1.000 und 10.000. Zu den Lösungen gehören: 1. Tail-Rekursionsoptimierung; 2. Tail-Call;

Ja, C++-Lambda-Ausdrücke können die Rekursion mithilfe von std::function unterstützen: Verwenden Sie std::function, um einen Verweis auf einen Lambda-Ausdruck zu erfassen. Mit einer erfassten Referenz kann sich ein Lambda-Ausdruck rekursiv selbst aufrufen.

Gegeben seien zwei Strings str_1 und str_2. Das Ziel besteht darin, mithilfe eines rekursiven Verfahrens die Anzahl der Vorkommen der Teilzeichenfolge str2 in der Zeichenfolge str1 zu zählen. Eine rekursive Funktion ist eine Funktion, die sich innerhalb ihrer Definition selbst aufruft. Wenn str1 „Iknowthatyouknowthatiknow“ und str2 „know“ ist, beträgt die Anzahl der Vorkommen -3. Lassen Sie uns das anhand von Beispielen verstehen. Geben Sie beispielsweise str1="TPisTPareTPamTP", str2="TP" ein; geben Sie Countofoccurrencesofasubstringrecursi aus

Der rekursive Algorithmus löst strukturierte Probleme durch den Selbstaufruf von Funktionen. Der Vorteil besteht darin, dass er einfach und leicht zu verstehen ist. Der Nachteil besteht jedoch darin, dass er weniger effizient ist und einen Stapelüberlauf verursachen kann Der Vorteil der Stapeldatenstruktur besteht darin, dass sie effizienter ist und einen Stapelüberlauf vermeidet. Der Nachteil besteht darin, dass der Code möglicherweise komplexer ist. Die Wahl zwischen rekursiv und nicht rekursiv hängt vom Problem und den spezifischen Einschränkungen der Implementierung ab.

Binäre Arithmetik ist eine Operationsmethode, die auf Binärzahlen basiert. Zu ihren Grundoperationen gehören Addition, Subtraktion, Multiplikation und Division. Die binäre Arithmetik umfasst neben Grundoperationen auch logische Operationen, Verschiebungsoperationen und andere Operationen. Zu den logischen Operationen gehören UND, ODER, NICHT und andere Operationen, und Verschiebungsoperationen umfassen Linksverschiebungs- und Rechtsverschiebungsoperationen. Für diese Operationen gelten entsprechende Regeln und Operandenanforderungen.

Eine rekursive Funktion ist eine Technik, die sich selbst wiederholt aufruft, um ein Problem bei der Zeichenfolgenverarbeitung zu lösen. Es erfordert eine Beendigungsbedingung, um eine unendliche Rekursion zu verhindern. Rekursion wird häufig bei Operationen wie der String-Umkehr und der Palindromprüfung verwendet.

Rekursion ist eine leistungsstarke Technik, die es einer Funktion ermöglicht, sich selbst aufzurufen, um ein Problem zu lösen. In C++ besteht eine rekursive Funktion aus zwei Schlüsselelementen: dem Basisfall (der bestimmt, wann die Rekursion stoppt) und dem rekursiven Aufruf (der das Problem aufteilt). kleinere Teilprobleme). Indem Sie die Grundlagen verstehen und praktische Beispiele wie faktorielle Berechnungen, Fibonacci-Folgen und binäre Baumdurchläufe üben, können Sie Ihre rekursive Intuition entwickeln und sie sicher in Ihrem Code verwenden.

Tail Recursion Optimization (TRO) verbessert die Effizienz bestimmter rekursiver Aufrufe. Es wandelt endrekursive Aufrufe in Sprunganweisungen um und speichert den Kontextstatus in Registern statt auf dem Stapel, wodurch zusätzliche Aufrufe und Rückgabeoperationen an den Stapel entfallen und die Effizienz des Algorithmus verbessert wird. Mit TRO können wir tail-rekursive Funktionen (z. B. faktorielle Berechnungen) optimieren. Indem wir den tail-rekursiven Aufruf durch eine goto-Anweisung ersetzen, konvertiert der Compiler den goto-Sprung in TRO und optimiert die Ausführung des rekursiven Algorithmus.
