2017-04-09 4 views
1

Unterhalb des Codes zum Zählen der Zahl "1" in String.So verwenden Sie die Zählervariable im Rumpf der rekursiven Funktion

count2=0 #global variable 
def Ones(s): 
    no=0; 
    global count2 #wanted to eliminate global variable 
    if(count2>=len(s)): 
     return no 
    if(s[count2]=='1'):#count2 is the index of current character in String 
     no = no+1 
     count2=count2+1 
     return no + Ones(s) 
    else: 
     count2=count2+1 
     return Ones(s) 

in dem obigen Code count2 als globaler Variable verwendet wird, ist es eine Art und Weise, count2 Variable als lokal innerhalb der Funktion zu deklarieren und zu verwenden, hat versucht, wie aber kein Glück

def Ones(s): 
    count2=0 # but everytime it get reset to zero 

Hinweis : Anzahl der Parameter der Funktion sollte nur eine bleiben und keine andere Hilfsfunktion verwenden müssen.

+0

Können Sie beschreiben, was der Algorithmus versucht? Ist 'count2' der Index des aktuellen Charakters zu bewerten? Könnten Sie einen zweiten Parameter mit einem Standardwert haben, der effektiv eine Einzelparameterfunktion ist? – jonrsharpe

+0

@jonrsharpe ja count2 ist Index des aktuellen Charakters – Roushan45

+0

Dann ist das kein sehr guter Name dafür. Auch wenn Sie keine spezielle Rekursion benötigen, können Sie 'counter (s) [' 1 ']' zurückgeben. – jonrsharpe

Antwort

2

Die Vermeidung expliziter Zustandsvariablen ist ein wichtiger Teil des Rekursionskonzepts.

Die Methode, die Sie aufrufen, benötigt nur den Rest der Zeichenfolge, um 1s darin zu finden. Anstatt also eine Zeichenfolge und die Position in der Zeichenfolge zu übergeben, können Sie nur den Rest der Zeichenfolge übergeben.

Pythons mächtige Indexierungssyntax macht dies sehr einfach. Sehen Sie es sich einmal so an: Jede Instanz der Methode kann den Teil, den sie bearbeitet hat (in diesem Fall ein Zeichen), übernehmen und den Teil weiterleiten, den sie nicht bearbeitet hat (der Rest der Zeichenkette).

2

Genau wie @ypnos gesagt, wenn Sie wirklich Rekursion verwenden möchten, hier ist der Code:

def Ones(s): 
    if not s: 
     return 0 
    if s[0]=='1': 
     return 1 + Ones(s[1:]) 
    else: 
     return Ones(s[1:]) 

Hoffe, es hilft.

Verwandte Themen