Как мне подсчитать количество итераций рекурсивной функции в Python?

def solver():
    empty_cell = empty_square()
    counter = 0

    if not empty_cell:
        return True

    i,j = empty_cell[0],empty_cell[1]
    for num in range(1,10):
        counter += 1
        if constraint_check(num,i,j):
            sudoku[i][j] = num

            if solver():
                return True

            else:
                sudoku[i][j] = 0

    return False 

Учитывая приведенный выше код, как мне реализовать счетчик для подсчета количества итераций, которые делает рекурсивная часть функции? Как видно из кода, я попытался сделать что-то выше, но мне не удалось получить эту переменную, чтобы распечатать ее и записать число.


person Cassandra Trotter    schedule 04.07.2021    source источник
comment
Вы искали проблему? Что ты нашел?   -  person Trilarion    schedule 04.07.2021
comment
@CassandraTrotter, если вы нашли решение, почему бы не поделиться им как самостоятельным ответом, чтобы другие люди с той же проблемой можно поучиться на вашем опыте? Цель сайта — курировать хранилище знаний, а не удалять вопросы, как только вы получаете решение.   -  person ggorlen    schedule 05.07.2021
comment
Я не нашел решения @ggorlen, поэтому удалил контракт. Предоставленный ответ является крайне неадекватным. Таким образом, ни один хороший ответ не должен позволить мне удалить вопрос.   -  person Cassandra Trotter    schedule 06.07.2021
comment
Хм... может быть, я не совсем ясно выразился. Задавая вопрос, вы создаете ресурс сообщества для будущих посетителей с той же проблемой. Отсутствие ответа, который вас удовлетворил, не является основанием для удаления вопроса (если только ни один из ответов не получил положительного ответа, что здесь неприменимо). 3 члена сообщества считают, что ответ помог им или был адекватным решением, поэтому ветка остается, чтобы помочь будущим пользователям. См. заголовок этой метапотока. Когда я не могу удалить свое сообщение?   -  person ggorlen    schedule 06.07.2021
comment
Кстати, Подсчет рекурсивных вызовов функции кажется Каноническая ветка для этого вопроса. Верхний ответ предлагает инициализировать solver.counter = 0 вне функции и изменить ваши вызовы на solver.counter += 1. После того, как все вызовы будут разрешены, solver.counter сохранит ваш результат в охватывающей области.   -  person ggorlen    schedule 07.07.2021


Ответы (1)


установите счетчик как параметр функции -> решатель (счетчик = 1), затем при повторном вызове в вашей функции добавьте +1 -> решатель (счетчик + 1)

person tardigrade    schedule 04.07.2021
comment
Этот ответ не работает. Я нашел отдельное решение. Пожалуйста, удалите этот ответ, чтобы я мог удалить вопрос - person Cassandra Trotter; 04.07.2021