Я больше люблю простенький прог-язык VBScript
Ссылка (его код после написания / правки сразу готов к работе, ПрогСреда и компиляторы не нужны…). Но принцип подсчёта кол-ва итераций или времени выполнения прог-блока - одинаков во всех языках.
Примеры: Чтоб подсчитать кол-во вызовов какой-то рекурсивной функции (например функци Сравнений funCompare ), я перед первым вызовом создаю и обнуляю счётчик вызовов:
nCompar := 0В блоке функции
funCompare оператор
nCompar ++ инкрементирует счётчик. По окончании всех вызовов остаётся лишь зачитать nCompar-значение, выведенное на экран пользователя. Никаких заморочек типа "
определить этот момент выхода из рекурсии" не требуется.
Иногда бывает нужно подсчитать кол-во циклов вызова рекурсивной функции, когда эта функция вызывает сама себя заранее-непредсказуемое число раз. Живой пример из практи: Мне надо составить файлы-списки моих 12 корне-папок с их под-папками для Бэкапа (резервное копирование важных файлов на случай их ошибочного удаления или смерти ГлавЖёстДиска). Понятно, что каждая подпапка содержит вложенные подпапки, и будут вложенные рекурси-вызовы. Для попутного подсчёта файлов в корнепапках я в начале скрипта создаю и обнуляю 2 счётчика: nRoot и nAll .
В процессе работы рекурси-функции оба счётчика инкрементируются. Но по окончании обработки каждой из 12 корне-папки на экран выводится и сразу обнуляется переменная nRoot (кол-во файлов в отдельной корне-папке), а по окончании работы скрипта я читаю nAll-значение - итоговое кол-во файлов.
Обратите внимание: имена моих переменных состоят не из одной буквы, а уникальны для всего скрипт-кода и ещё имеют смысл (Root - корень, All - все, n - числовое кол-во). Это позволяет мигом находить ПрогПоиском все вхождения имени переменной в очень большой код и легко понимать свой забытый код спустя много лет, если потребуется правка.