Erklärung des rekursiven Inhalts

Algorithmusidee:

Rekursion besteht darin, ein großes Problem, das nicht einfach zu implementieren ist, in kleine Probleme aufzuteilen, die einfach zu implementieren sind. Wenn das Problem der Aufteilung immer noch nicht einfach zu lösen ist, können Sie die Aufteilung fortsetzen. Nur wenn das kleine Problem leicht zu lösen ist, ist das große Problem gelöst.

Beispiel (Fakultät): Wenn wir jetzt die Fakultät 10 berechnen möchten, kennen wir die Fakultät 10 nicht, weil sie zu groß ist. Wenn wir jedoch die Fakultät 9 kennen, kennen wir die Fakultät 10, aber wir wissen nicht, was die Fakultät 9 ist. Aber wenn wir die Fakultät von 8 kennen, kennen wir auch die Fakultät von 9 (und so weiter) ... Wenn wir nun das Problem auf die Fakultät von 1 herunterbrechen, wird die Fakultät von 10 von uns gelöst. .

Code:

#include<stdio.h>
int fun(int n)
{
    
    
	if(n==1) return 1;
	else return fun(n-1)*n;
}
int main ()
{
    
    
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}

Codeanalyse: Dies ist ein einfacher rekursiver Code (im Wesentlichen ein Selbstaufruf einer Funktion). Lassen Sie mich als Nächstes darüber sprechen, wie ein rekursiver Code geschrieben wird und wie der rekursive Code ausgeführt wird.

Rekursive Schreibmethode:

1. Schreiben Sie eine zweckmäßige Funktion (nehmen Sie das obige Beispiel als Beispiel: eine Funktion, die die Fakultät berechnet).
2. Bestimmen Sie die Abbruchbedingung der Rekursion (nehmen Sie das obige Beispiel: Wenn n gleich 1 ist, gibt die Funktion den Wert der Fakultät 1 zurück, was bedeutet, dass die Aufteilung die Frage erreicht hat, die wir direkt beantworten können, und sie wird auch zu diesem Zeitpunkt erreicht. Die Beendigungsbedingung dieser Rekursion).
3. Rekursive Rekursion (nehmen Sie das obige als Beispiel: fun (n) = fun (n) * n dies ist der rekursive rekursive Typ) Ich persönlich bevorzuge es, dies als rekursiven Typ einer Folge von Zahlen zu verstehen Die Wiederholung der Zahlenfolge. Nachdem wir den Wert 1 kennen, können wir den Wert einer beliebigen Zahl nach 1 so lange berechnen, wie wir möchten.

Rekursive Operation:

Wie funktioniert diese rekursive Funktion in einem Computer?
Ich persönlich teile die Rekursion in zwei Teile: Der eine ist rekursiv und der andere rekursiv. Die Rekursion besteht darin, ein Problem ständig aufzuteilen (dieser Prozess beginnt mit einem großen Problem). Bei jedem Schritt in diesem Prozess erhalten Sie keine Antwort. Bis die Frage in Fragen unterteilt ist, für die wir die Antwort kennen (dh wenn die rekursive Beendigungsbedingung vorliegt), beginnt der Rückgabeprozess. Dieser Prozess beginnt mit kleinen Fragen und steigt allmählich an. Geben Sie die Antwort zurück (Sie erhalten bei jedem Schritt des Prozesses eine Antwort), bis die von uns benötigte Antwort zurückgegeben wird. Dann ist der gesamte Rekursionsprozess abgeschlossen.

Beispiel: Angenommen, Sie sind Li Hua und Ihr Freund ist Xiao Ming. Sie sitzen beide in derselben Spalte. Sie befinden sich in der ersten Reihe und Xiao Ming in der letzten Reihe. Wenn Sie sich nun die englische Komposition von Xiao Ming ansehen möchten, müssen Sie die Anfrage an die nächste Ebene weiterleiten (dieser Vorgang wird als bestanden bezeichnet). Wenn die Anfrage an Xiao Ming übergeben wird (rekursive Beendigungsbedingung), erstellt er den Text Nehmen Sie es heraus und übergeben Sie es an die vorherige Ebene (dieser Vorgang wird als Zurückgeben bezeichnet). Wenn Sie den Text erhalten, ist der gesamte Vorgang abgeschlossen.

Lassen Sie mich als nächstes ausführlich erklären:
Zuerst müssen wir ein Konzept kurz verstehen. Stapel: Jede Funktion verfügt über einen eigenen Stapel, in dem einige der Werte in der Funktion gespeichert werden. (Ich werde auch einen Blog über den spezifischen Inhalt des Stapels schreiben, um dies speziell zu erklären.)
Angenommen, wir möchten jetzt die Fakultät 3 berechnen. Zuerst wird 3 in den Stapel gelegt (Stapel 1). Nach Eingabe der Funktion ist dies keine Beendigungsbedingung. Dann müssen wir ausführen fun (2) * 3, hier ist ein weiterer Funktionsaufruf und ein neuer Stapel (Stapel 2) wird geöffnet, und dann wird 2 in den Stapel geschoben, und dann müssen wir fun (1) * 2 ausführen, hier ist ein weiterer Funktionsaufruf Öffnen Sie dann einen neuen Stapel (Stapel 3) und drücken Sie 1 in den Stapel. Diesmal ist jedoch die rekursive Beendigungsbedingung erreicht. Dann gibt Stapel 3 1 zurück, 2 gute Stapel geben 2 zurück und Stapel 1 gibt 4 zurück. . Seitdem ist die Rekursion beendet und wir haben auch die Antwort.

Ich glaube, Sie hätten eine andere Art des Fakultätsschreibens sehen sollen:

#include<stdio.h>
int main ()
{
    
    
	int n,i,sum=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
    
    
		sum*=i;
	}
	printf("%d",sum);
}

Tatsächlich wird die Idee dieser Methode als Iteration bezeichnet.
Der Unterschied zwischen Iteration und Rekursion ist der gleiche: Die
Iteration besteht darin, Schritt für Schritt von kleinen Problemen zu großen Problemen zu gelangen. (Die Denkweise ist von unten nach oben)
Rekursion ist eine schrittweise Aufteilung großer Probleme in kleine. (Die Denkweise ist von oben nach unten)

Nach dem Erlernen der Rekursion kann jeder mit diesem Problem üben:

Xiao Ming wird jetzt die Treppe hinaufgehen. Er kann einen Schritt nach dem anderen oder zwei Schritte nach dem anderen hinaufgehen. Wie viele Wege gibt es, wenn Xiao Ming n Stufen erreicht?

Antworten:

#include<stdio.h>
int fun(int n)
{
    
    
	if(n==1||n==2) return n;
	else return fun(n-1)+fun(n-2);
}
int main ()
{
    
    
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}

Ich denke du magst

Origin blog.csdn.net/ABded/article/details/103552401
Empfohlen
Rangfolge