Rekursionsübungsprobleme und Lösungen
In diesem Artikel besprechen wir einige Probleme der Rekursionspraxis und ihre detaillierten Lösungen.
Lassen Sie uns zunächst verstehen, was Rekursion ist und wie sie funktioniert:
Rekursion – Rekursion ist eine Programmiertechnik, bei der sich eine Funktion oder Methode mehrmals selbst aufruft, um ein Problem zu lösen. Diese Funktion zerlegt das Problem in kleinere Teilprobleme und löst diese, bis der Basisfall erreicht ist.
Der Basisfall ist eine Stoppbedingung, die sicherstellt, dass die Funktion den Selbstaufruf stoppt und das Ergebnis innerhalb einer begrenzten Zeit zurückgibt.
Rekursion ist eine leistungsstarke Technik zur Lösung komplexer Probleme. Es ist jedoch wichtig, sie sorgfältig zu entwerfen, um Endlosschleifen zu vermeiden und sicherzustellen, dass die Funktion korrekt beendet wird, wenn eine Funktion mehrmals rekursiv aufgerufen wird.
Frage 1
Dies ist die grundlegendste Frage im Zusammenhang mit der Rekursion.
Finden Sie die Fakultät einer bestimmten Zahl mithilfe des Konzepts der Fakultät.
Implementierung in C++
#include <bits/stdc++.h> using namespace std; // recursive function to // calculate factorial of number int Numberfact(int number) { // base condition if(number == 1) { return 1; } else { return number * Numberfact(number-1); } } // main code int main() { int number = 5; cout<< " The factorial of 5 is " << Numberfact(number); return 0; }
Ausgabe
The factorial of 5 is 120
Frage 2
In diesem Problem müssen wir die n-te Zahl in der Folge beginnend bei 1 drucken, wobei die i-te Zahl die Summe ihrer beiden vorherigen Zahlen ist, allgemein bekannt als Fibonacci-Folge.
Implementierung in C++
#include <bits/stdc++.h> using namespace std; // function to // calculate nth number of // Fibonacci series int Numberfib(int number) { // base condition if(number <= 1) { return number; } else { return Numberfib(number-1)+Numberfib(number-2); } } // main code int main() { int number = 9; cout<< " The 9th number of the Fibonacci series is " << Numberfib(number); return 0; }
Ausgabe
The 9th number of the Fibonacci series is 34
Frage 3
Berechnen Sie die Ziffernsumme einer bestimmten Zahl
Implementierung in C++
#include <bits/stdc++.h> using namespace std; // recursive method to // calculate sum of digits int Sumofdigits(int number) { // base case if(number <=10) { return number; } else { return number%10 + Sumofdigits( number/10 ); } } // main code int main() { int number = 563; cout<< " The sum of digits of the number " << number << " is "<< Sumofdigits(number); return 0; }
Ausgabe
The sum of digits of the number 563 is 14
Frage 4
Berechnen Sie den „Potenz“-Wert einer Zahl.
In dieser Frage werden uns zwei Zahlen „Zahl“ und „Potenz“ gegeben, und unsere Aufgabe besteht darin, die Potenz „Potenz“ der Zahl „Zahl“ zu ermitteln.
Implementierung in C++
#include <bits/stdc++.h> using namespace std; // recursive method to // generate the nth power // of a given number int powerofx( int nums , int pow) { // termination condition if(pow == 0) { return 1; } else { return nums*powerofx(nums, pow-1); } } // main code int main() { int nums = 2; int pow =6; cout<< " The number " << nums << " To the power "<< pow <<" is "<< powerofx(nums, pow); return 0; }
Ausgabe
The number 2 To the power 6 is 64
Frage 5
Finden Sie den GCD (größten gemeinsamen Teiler) zweier Zahlen.
GCD steht für „Größter gemeinsamer Teiler“ und ist die größte Zahl, durch die zwei oder mehr Zahlen ohne Rest geteilt werden können. Er wird auch als höchster gemeinsamer Faktor (HCF) dieser Zahlen bezeichnet.
Angenommen, wir haben zwei verschiedene Zahlen: 14 und 28.
Die Faktoren von 14 sind 1, 2, 7 und 14.
Die Faktoren von 28 sind 1, 2, 4, 7, 14 und 28.
Wir können dann die gemeinsamen Faktoren dieser beiden Zahlen ermitteln, nämlich 1, 2, 7 und 14. Die größte Zahl, die sowohl 14 als auch 28 teilen kann, ohne einen Rest zu hinterlassen, ist 14, daher ist der größte gemeinsame Teiler von 14 und 28 14.
Implementierung in C++
#include <bits/stdc++.h> using namespace std; // function to recursively // calculate the gcd int greatestcommondivisor(int num1, int num2) { if (num2 == 0) { return num1; } else { return greatestcommondivisor(num2, num1 % num2); } } // main code int main() { int num1 = 36; int num2 =60; cout<< " The Greatest common divisor of " << num1 << " and "<< num2<<" is "<< greatestcommondivisor(num1, num2); return 0; }
Ausgabe
The Greatest common divisor of 36 and 60 is 12
Frage 6
Array in umgekehrter Reihenfolge drucken
Wir erhalten ein Array mit n ganzen Zahlen und unsere Aufgabe besteht darin, dasselbe Array der Reihe nach auszudrucken, wobei die erste Zahl die letzte Zahl ist, die zweite Zahl die vorletzte Zahl und so weiter.
Implementierung in C++
#include <bits/stdc++.h> using namespace std; // recursive function to // =reverse print the given array void reverseprint(int nums[], int begining, int end) { if (begining >= end) { return ; } else { cout << nums[end-1] << " "; reverseprint(nums, begining, end - 1); } } // main code int main() { int size =4; int nums[] = { 2, 3, 4, 5 } ; cout<< " the given array is reverse order is " << endl ; reverseprint(nums, 0, size); return 0; }
Ausgabe
the given array is reverse order is 5 4 3 2
Hier sind einige weitere grundlegende Übungsfragen, um eine grundlegende Ebene der Rekursion zu beherrschen -
Schreiben Sie eine Funktion, um rekursiv zu prüfen, ob eine Zeichenfolge ein Palindrom ist.
Schreiben Sie eine Funktion mit Schwanzrekursion, um die Fakultät einer bestimmten Zahl zu ermitteln.
Schreiben Sie eine Funktion, um das Problem des Turms von Hanoi zu lösen.
Schreiben Sie eine Funktion, um eine binäre Suche in einem sortierten Array durchzuführen.
Das obige ist der detaillierte Inhalt vonRekursionsübungsprobleme und Lösungen. 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.

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

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.

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.

Die Analyse der Sicherheitslücken des Java-Frameworks zeigt, dass XSS, SQL-Injection und SSRF häufige Schwachstellen sind. Zu den Lösungen gehören: Verwendung von Sicherheits-Framework-Versionen, Eingabevalidierung, Ausgabekodierung, Verhinderung von SQL-Injection, Verwendung von CSRF-Schutz, Deaktivierung unnötiger Funktionen, Festlegen von Sicherheitsheadern. In tatsächlichen Fällen kann die ApacheStruts2OGNL-Injection-Schwachstelle durch Aktualisieren der Framework-Version und Verwendung des OGNL-Ausdrucksprüfungstools behoben werden.

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.
