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.