ich gesehen habe machen können Es war ziemlich durcheinander, also beschloss ich, die Dinge zu klären.
Lösung 0: Statische Variable
den Code Betrachten wir mit einer leichten Modifikation vorgeschlagen
#include<iostream>
using namespace std;
void fun()
{
static int count=1;
count++;
cout << "fun() is called " << count << " times" << endl;
if(count<=10)
{
fun();
}
}
int main()
{
cout << "first call" << endl;
fun();
cout << "second call" << endl;
fun();
cout << "third call" << endl;
fun();
}
Und dies ist die Ausgabe:
first call
fun() is called 2 times
fun() is called 3 times
fun() is called 4 times
fun() is called 5 times
fun() is called 6 times
fun() is called 7 times
fun() is called 8 times
fun() is called 9 times
fun() is called 10 times
fun() is called 11 times
second call
fun() is called 12 times
third call
fun() is called 13 times
Wie Sie die Verwendung von sehen statische Variablen könnten zu einigen schrecklichen Fehlern führen.
Hier haben Sie eine One-Shot-Funktion, die Ihnen einige große Schmerzen in der Zukunft verursachen wird.
Des Weiteren führt die Verwendung von statischen Variablen zu einem nicht lesbaren Code, die fehleranfällig
Nur nicht tut es!
Lösung 1: Variable Wert übergeben
diesen Code vor:
#include <iostream>
using namespace std;
void fun(int i){
cout<<i<<endl;
if(i!=3) {
i++;
fun(i);
fun(i);
}
}
int main(){
fun(0);
}
Dies ist die Ausgabe:
0
1
2
3
3
2
3
3
1
2
3
3
2
3
3
Wie Sie die Ausgabe nicht das ist zu sehen wie oft die Funktion aufgerufen wird
Lösung 2: Variable per Referenz übergeben
#include <iostream>
using namespace std;
void fun(int& x){
if(x>=10)
return;
++x;
cout << x << endl;
fun(x);
}
void funEntry(){
int x = 0;
cout << "Entry point" << endl;
fun(x);
}
int main(){
funEntry();
funEntry();
}
wird wie dieser
#include <iostream>
using namespace std;
void fun(int i, int& x){
if(i>=4)
return;
++x;
cout << i << " " << x << endl;
fun(i+1,x);
fun(i+2,x);
}
void funEntry(){
int x = 0;
cout << "Entry point" << endl;
fun(0,x);
}
int main(){
funEntry();
funEntry();
}
Output Dieser Ansatz funktioniert auch mit etwas exotischere rekursive Muster
Entry point
1
2
3
4
5
6
7
8
9
10
drucken:
Entry point
0 1
1 2
2 3
3 4
3 5
2 6
3 7
Entry point
0 1
1 2
2 3
3 4
3 5
2 6
3 7
Sie können einen Parameter hinzufügen und ihn bei der Rekursion erhöhen. – chris
Ich empfehle Ihnen dringend, einen Blick auf meine Umfrage zu werfen –