Python: рекурсивная функция трассировки | Кодементор

На пути к программной инженерии я сталкиваюсь с проблемами разного рода. А еще я люблю, когда приходит время решить какую-нибудь «чисто программную» задачу. Давайте посмотрим на задание, с которым меня попросили помочь.

рекурсия.png

После часа работы я нашел решение. Позвольте мне поделиться кодом результата с комментариями:

from functools import wraps



def trace(func):

    
    func_name = func.__name__
    
    separator = '|  '

    
    trace.recursion_depth = 0

    @wraps(func)
    def traced_func(*args, **kwargs):

        
        
        
        
        print(f'{separator * trace.recursion_depth}|-- {func_name}({", ".join(map(str, args))})')
        
        trace.recursion_depth += 1
        result = func(*args, **kwargs)
        
        trace.recursion_depth -= 1
        
        print(f'{separator * (trace.recursion_depth + 1)}|-- return {result}')

        return result

    return traced_func


def factorial(n):
   if n == 1: return 1
   else: return n * factorial(n-1)




factorial = trace(factorial)


print(factorial(7))

Хотелось бы услышать от вас об этом решении. Вам это нравится? У вас есть другие идеи, как это решить?

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *