python récursive - Transformer l'itération en récursivité





recursivité méthode (3)


Une conversion directe et équivalente de l'algorithme ressemblerait à ceci:

def check(string, counter=0):
  if not string:
    return "Balanced" if counter == 0 else "Unbalanced"
  elif counter < 0:
    return "Unbalanced"
  elif string[0] == "(":
    return check(string[1:], counter+1)
  elif string[0] == ")":
    return check(string[1:], counter-1)
  else:
    return check(string[1:], counter)

Utilisez-le comme ceci:

check("(())")
=> "Balanced"

check(")(")
=> "Unbalanced"

Notez que l'algorithme ci-dessus prend en compte les cas où la parenthèse fermante apparaît avant la parenthèse ouvrante correspondante, grâce à la condition elif counter < 0 - corrigeant ainsi un problème présent dans le code original.

Je veux vérifier si l'utilisateur de string entré a une quantité équilibrée de ( et )

ex. ()( n'est pas équilibré (()) est équilibré

def check(string):

        counter=0
        string=string.replace(" ","")

        if string[0] is "(":

           for x in string:
                if x is "(":
                        counter=counter+1
                elif x is ")":
                        counter=counter-1

           if counter1 is 0:
                print("Balanced")
           else:
                print("Unbalanced")
        else:
                print ("Unbalanced")

donc cela fonctionne, mais comment puis-je résoudre ce problème avec la récursivité? J'essaie de penser comment je peux faire décroître une variable chaque fois que je l'appelle de manière récursive et une fois qu'elle est 0, stop.s




>>> def check(mystr, barometer=0):
...     if not mystr:
...         return barometer
...     elif mystr[0] == "(":
...         return check(mystr[1:], barometer+1)
...     elif mystr[0] == ")":
...         return check(mystr[1:], barometer-1)
...     else:
...         return check(mystr[1:], barometer)
... 
>>> for s in ["()", "(()", "(())", "()()"]: print(s, check(s))
... 
() 0
(() 1
(()) 0
()() 0

0 signifie que vous êtes correctement équilibré. Tout le reste signifie que vous n'êtes pas équilibré




Si quelqu'un arrive ici (comme je l'ai fait) cherchant à ajouter une autorité de certification (dans mon cas, Charles Proxy) pour httplib2, il semble que vous puissiez l'ajouter au fichier cacerts.txt inclus avec le paquet python.

Par exemple:

cat ~/Desktop/charles-ssl-proxying-certificate.pem >> /usr/local/google-cloud-sdk/lib/third_party/httplib2/cacerts.txt

Les variables d'environnement référencées dans d'autres solutions semblent être spécifiques aux requêtes et n'ont pas été récupérées par httplib2 lors de mes tests.





python recursion python-3.x iteration