geeksforgeeks compiler python recursion max depth tree-traversal

compiler - Python: se ha excedido la profundidad máxima de recursión



binary tree height c++ (1)

Tengo el siguiente código de recursión, en cada nodo al que llamo sql query para que los nodos pertenezcan al nodo padre.

aquí está el error:

Exception RuntimeError: ''maximum recursion depth exceeded'' in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879768c>> ignored RuntimeError: maximum recursion depth exceeded while calling a Python object Exception AttributeError: "''DictCursor'' object has no attribute ''connection''" in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879776c>> ignored

Método que llamo para obtener resultados sql:

def returnCategoryQuery(query, variables={}): cursor = db.cursor(cursors.DictCursor); catResults = []; try: cursor.execute(query, variables); for categoryRow in cursor.fetchall(): catResults.append(categoryRow[''cl_to'']); return catResults; except Exception, e: traceback.print_exc();

De hecho, no tengo ningún problema con el método anterior, pero lo pongo de todos modos para dar una visión general adecuada de la pregunta.

Código de Recursividad:

def leaves(first, path=[]): if first: for elem in first: if elem.lower() != ''someString''.lower(): if elem not in path: queryVariable = {''title'': elem} for sublist in leaves(returnCategoryQuery(categoryQuery, variables=queryVariable)): path.append(sublist) yield sublist yield elem

Llamar a la función recursiva

for key, value in idTitleDictionary.iteritems(): for startCategory in value[0]: print startCategory + " ==== Start Category"; categoryResults = []; try: categoryRow = ""; baseCategoryTree[startCategory] = []; #print categoryQuery % {''title'': startCategory}; cursor.execute(categoryQuery, {''title'': startCategory}); done = False; while not done: categoryRow = cursor.fetchone(); if not categoryRow: done = True; continue; rowValue = categoryRow[''cl_to'']; categoryResults.append(rowValue); except Exception, e: traceback.print_exc(); try: print "Printing depth " + str(depth); baseCategoryTree[startCategory].append(leaves(categoryResults)) except Exception, e: traceback.print_exc();

Código para imprimir el diccionario,

print "---Printing-------" for key, value in baseCategoryTree.iteritems(): print key, for elem in value[0]: print elem + '',''; raw_input("Press Enter to continue...") print

Si la recursión es demasiado profunda, debería recibir el error cuando llamo a mi función de recursión, pero cuando obtengo este error cuando imprimo el diccionario.


Puede aumentar la profundidad de la pila permitida; con esto, se podrán realizar llamadas recursivas más profundas, como esta:

import sys sys.setrecursionlimit(10000) # 10000 is an example, try with different values

... Pero te aconsejo que primero intentes optimizar tu código, por ejemplo, usando la iteración en lugar de la recursión.