Heim > Artikel > Backend-Entwicklung > Was ist Rekursion in C-Sprache? Teilen klassischer rekursiver Funktionsbeispiele
Was ist Rekursion in der C-Sprache? Der folgende Artikel hilft Ihnen, die Rekursion in der C-Sprache anhand klassischer rekursiver Funktionsbeispiele zu verstehen.
Rekursion ist eine Methode eines Prozesses oder einer Funktion, die sich in ihrer Definition oder Beschreibung direkt oder indirekt aufruft Sich selbst indirekt aufrufen Das Aufrufen einer eigenen Funktion bedeutet das Aufrufen eines eigenen Prozesses.
Studenten, die neu in der Rekursion sind, können es schwierig finden, die Rekursion zu verstehen. Es kann viele schwierige Punkte geben, wie zum Beispiel:
Warum kann a Funktion in sich selbst aufrufen?
Da Sie sich selbst aufrufen können, müssen während der rekursiven Operation viele Ebenen miteinander verschachtelt sein.
Während der rekursiven Operation werden Parameter zwischen mehreren verschachtelten Ebenen übergeben. Beeinflussen sich die mehreren Ebenen gegenseitig?
Zwei Elemente der Rekursion
Rekursionsgrenze
Die Logik der Rekursion – Rekursionsformel "
Der rekursive Prozess muss Parameteränderungen aufweisen, und die Parameteränderungen beziehen sich auf die Rekursionsgrenze.
Bei schwierigeren Fragen sind diese beiden Es ist nicht einfach Holen Sie es sich direkt.
Schüler, die die verschiedenen Probleme der Rekursion verstehen, können sie vielleicht in einem Satz klar erklären, aber Schüler, die es nicht verstehen, werden sie nicht verstehen können, egal wie viel sie sagen.
Das Folgende ist ein paar einfache Beispiele zum [Erleben] der Rekursion. Verstehen Sie die Rekursion zunächst aus einer [wahrnehmungsbezogenen] Perspektive.
1. Fibonacci-Zahl
Wir gelangen zur Rekursion der Fibonacci-Zahl. Die Formel lautet: F(0)=F(1)=1,F(n)=F(n-1)+F(n-2) n>=2;
Dies ergibt offensichtlich den Wert von F(n), wenn die Rekursionsgrenze n=0 oder 1 und die rekursive Logik F(n)=F(n-1)+F(n-2) rekursiv sind Formel. Diese rekursive Funktion ist also nicht schwer zu schreiben
#includeusing namespace std; int F(int n)//函数返回一个数对应的Fibonacci数{ if(n0 || n1)//递归边界 return 1; return F(n-1) + F(n-2);//递归公式} int main(){ //测试 int n; while(cin >> n) cout << F(n) << endl; return 0; }
2 Der Code lautet wie folgt:
#includeusing namespace std; int F(int n){ if(n==0)//递归边界 return 1; return n*F(n-1);//递归公式} int main(){ int n; cin >> n; cout << F(n) << endl; return 0; }
Gegeben ein Array a[]:a[0],a[1],…,a[n -1], wie kann man es rekursiv zusammenfassen? Es gibt noch zwei Fragen: Rekursionsgrenze und Rekursionsformel
Was ist die Rekursionsgrenze? Es ist im Moment nicht einfach, darüber nachzudenken, aber wir denken über die Summierung mehrerer Zahlen nach. Was ist der Prozess der manuellen Summierung von x, y, z, w? Die Schritte sind wie folgt:
x+y=a, die Aufgabe wird zu einer a,z,w-Summierung
a+z=b, die Aufgabe wird zu einer b,w-Summierung
b+w=c erhält die Antwort
Denken Sie darüber nach: [Erhalten Sie die Antwort] Warum können Sie die Antwort in diesem Schritt erhalten? (Unsinn?) Das liegt daran, dass man die Antwort erhalten kann, ohne eine Zahl hinzuzufügen.
Die Grenze der Rekursion ist also, dass es nur eine Zahl gibt.
Mit der Grenze der Rekursion gilt also: dann die Rekursionsformel Wollstoff? Tatsächlich ist die rekursive Formel im manuellen Berechnungsprozess enthalten:
wobei + die Summe zweier Zahlen ist und F die rekursive Funktion ist, die die Summe mehrerer Zahlen ermittelt. Der Code lautet wie folgt:
#includeusing namespace std; int F(int a[],int start,int end){ if(start==end)//递归边界 return a[start]; return a[start] + F(a,start+1,end);//递归公式} int main(){ int a[] = {1,2,3,4,5}; int s=0,e=4; cout << F(a,s,e) << endl; return 0; }
4. Finden Sie den Maximalwert eines Array-Elements
Was ist der Prozess des manuellen Findens des Maximalwerts, Durchlaufen + Vergleichen? Der Prozess ist wie folgt: Suchen Sie beispielsweise 3, 2, 6, den Maximalwert von 7, 2, 4: Legen Sie zuerst den Maximalwert max=-999999 fest und vergleichen Sie dann max und Array-Elemente nacheinander (durchqueren). [i]>max, aktualisieren Sie den Wert von max auf a[i], andernfalls bleibt max unverändert und läuft bis zum Ende des Durchlaufs weiter rückwärts
maxefba56e137a48422e2cb63e34d3c72ed2, max=3 bleibt unverändert
max3b1412b3f80e212730b8f407ee5d07474, max=7 bleibt unverändert
Der Durchlauf endet, max=7 ist der Maximalwert.
Ähnlich wie bei der Summierung ist die Die rekursive Formel lautet wie folgt:
wobei max die Funktion mit dem größeren Wert von zwei Zahlen ist, F ist eine rekursive Funktion, die den Maximalwert mehrerer Zahlen ermittelt. Der Code lautet wie folgt:
#includeusing namespace std; #define max(a,b) (a>b?a:b) int F(int a[],int s,int e){ if(s==e) return a[s]; else if(s+1 == e)//递归边界 return max(a[s],a[e]); return max(a[s],F(a,s+1,e));//递归公式!!!} int main(){ int a[] = {5,1,4,6,2}; int s = 0,e = 4; cout << F(a,s,e) << endl; return 0; }
Der Grund, warum die obigen Beispiele [einfache Beispiele] sind, liegt darin, dass alle oben genannten Rekursionen zur [einseitigen Rekursion] gehören, der rekursive Pfad ist eine Richtung, daher ist die Idee relativ einfach >
Schwierige Rekursionsprobleme sind im Allgemeinen keine einseitige Rekursion, sondern erfordern die Verwendung der [Backtracking]-Methode. Die rekursive Methode ist nicht einfach vorstellbar.Das obige ist der detaillierte Inhalt vonWas ist Rekursion in C-Sprache? Teilen klassischer rekursiver Funktionsbeispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!