/*x^n sollte kleiner als 32767 sein, sonst ist die Ausgabe eine negative Zahl. Dies liegt daran, dass der Wertebereich des int-Typs begrenzt ist. Normale pow-Funktionen verwenden normalerweise Float- oder Double-Typen, und die Parameter sollten auch Float- oder Double-Typen sein. */
#include
int power(int x,int n)
{
wenn (n>1)
{
return x*power(x,n-1);
}
sonst
{
wenn (n>0)
return x;
sonst
return 1;
}
}
void main()
{
int x,n;
printf("input x,n:");
scanf("%d%d",&x,&n);
printf("%d",power(x,n));
getch();
clrscr();
}
Ihr rekursives Programm ist falsch. Ich werde ein korrektes mit Erklärung übertragen.
Rekursion und Aufruf von Sprachfunktionen
1. Grundinhalt:
Funktionen in der C-Sprache können rekursiv aufgerufen werden, das heißt, sie können direkt (einfache Rekursion) oder indirekt (indirekte Rekursion) aufgerufen werden.
Punkte:
1. C-Sprachfunktionen können rekursiv aufgerufen werden.
2. Es kann direkt oder indirekt aufgerufen werden. Derzeit werden nur direkte rekursive Aufrufe besprochen.
2. Rekursionsbedingung
Die Verwendung rekursiver Methoden zur Lösung von Problemen muss die folgenden drei Bedingungen erfüllen:
1. Das zu lösende Problem kann in ein neues Problem umgewandelt werden, und die Lösung für dieses neue Problem ist immer noch dieselbe wie die ursprüngliche Lösung, mit der Ausnahme, dass die zu verarbeitenden Objekte regelmäßig zunehmen oder abnehmen.
Hinweis: Die Methode zur Lösung des Problems ist die gleiche. Die Parameter zum Aufrufen der Funktion sind jedes Mal unterschiedlich (reguläres Inkrementieren oder Dekrementieren). Wenn kein Muster vorhanden ist, kann kein rekursiver Aufruf angewendet werden.
2. Dieser Transformationsprozess kann zur Lösung des Problems angewendet werden.
Hinweis: Die Verwendung anderer Methoden ist umständlich oder schwer zu lösen, aber die Verwendung rekursiver Methoden kann das Problem gut lösen.
3. Es muss eine klare Bedingung für die Beendigung der Rekursion vorliegen.
Hinweis: Achten Sie darauf, den rekursiven Aufruf an der entsprechenden Stelle zu beenden. Andernfalls kann es zu einem Systemabsturz kommen.
3. Rekursives Beispiel
Beispiel: Verwendung der rekursiven Methode n!
Wenn n>1, n! Das Problem kann in n*(n-1) transformiert werden! neue Fragen.
Zum Beispiel n=5:
Teil eins: 5*4*3*2*1 n*(n-1)!
Teil 2: 4*3*2*1 (n-1)*(n-2)!
Teil 3: 3*2*1 (n-2)(n-3)!
Teil 4: 2*1 (n-3)(n-4)!
Teil 5: 1 (n-5)! 5-5=0, erhalte den Wert 1, beende die Rekursion.
Quellenprogramm:
fac(int n)
{int t;
if(n==1)||(n==0) return 1;
sonst
{ t=n*fac(n-1);
return t;
}
}
main( )
{int m,y;
printf(“Geben Sie m: ein”);
scanf(“%d”,&m);
if(m
sonst
{y=fac(m);
printf(“n%d! =%d n”,m,y);
}
}
4. Erklärung der Rekursion
1. Wenn eine Funktion sich selbst aufruft, behält das System automatisch vorübergehend die aktuellen Variablen und formalen Parameter in der Funktion bei. Während einer neuen Aufrufrunde öffnet das System einen anderen Speicherort für die von der neu aufgerufenen Funktion verwendeten Variablen und formalen Parameter . Speichereinheit (Speicherplatz). Die bei jedem Funktionsaufruf verwendeten Variablen befinden sich in unterschiedlichen Speicherbereichen.
2. Je mehr Ebenen rekursiver Aufrufe vorhanden sind, desto mehr Speichereinheiten werden von Variablen mit demselben Namen belegt. Es ist wichtig zu bedenken, dass das System bei jedem Aufruf einer Funktion neuen Speicherplatz für die Variablen der Funktion freigibt.
3. Wenn die aufgerufene Funktion dieses Mal endet, gibt das System den durch diesen Aufruf belegten Speicherplatz frei. Der Programmablauf kehrt zum Aufrufpunkt der vorherigen Ebene zurück und erhält gleichzeitig die Daten des Speicherplatzes, den die Variablen und Formalparameter in der Funktion beim Betreten dieser Ebene belegen.
4. Alle rekursiven Probleme können mit nicht-rekursiven Methoden gelöst werden, aber bei einigen komplexeren rekursiven Problemen ist das Programm durch die Verwendung nicht-rekursiver Methoden oft sehr kompliziert und schwer zu lesen Dies kann das Programm präziser und klarer machen und die Lesbarkeit verbessern. Während des rekursiven Aufrufprozesses muss das System jedoch Speicherplatz für die Variablen in jeder Aufrufebene freigeben und sich die Rückgabepunkte nach jeder Aufrufebene merken um viel zusätzlichen Overhead hinzuzufügen, sodass rekursive Aufrufe von Funktionen normalerweise die Ausführungseffizienz des Programms verringern.
5. Vorgehensweise
fac(int n) /*Für jeden Aufruf unterschiedliche Parameter verwenden*/
{ int t; /* Jeder Aufruf öffnet einen anderen Speicherplatz für die Variable t*/
if(n==1)||(n==0) /*Gib 1 zurück, wenn diese Bedingungen erfüllt sind */
return 1;
sonst
{ t=n*fac(n-1); /*Jedes Mal, wenn das Programm hier ausgeführt wird, wird diese Funktion erneut mit n-1 als Parameter aufgerufen. Dies ist der Aufrufpunkt*/
return t; /*Hier nur ausführen, wenn alle im vorherigen Satz aufgerufenen Prozesse beendet wurden. */
}
}
Das obige ist der detaillierte Inhalt vonImplementieren Sie die Power-Funktion rekursiv in der C-Sprache und rufen Sie sie in der Hauptfunktion auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!