I have this code that is doing recursion but I want to be able to watch the recursions but illustrate the depth of each recursions and also when it comes back out. Just something simple as shown below. Not sure where I need to put spaces or tabs to make this happened and I'm using a string map_str and then printing it out at the end. Please see code and example of output. def get_process_parents(batchDate, late_process): global late_parents global map_str process_depends = [] #logging.info('late_process: %s ' % late_process) process_depends = getprocessDependencies(batchDate, late_process) late_parents[late_process.get('name')] = process_depends map_str += (' %s ---> %s \n------>\n' % (late_process.get('name'), process_depends)) #logging.info('Late_process Name: %s ---> Depends: %s ' % (late_process.get('name'),process_depends)) if not process_depends: #logging.info('No more depends: %s' % late_process.get('name')) late_parents_process.add(late_process.get('name')) map_str += (' %s ---> %s\n ---->\n' % (late_process.get('name'), process_depends)) else: for process_depend in process_depends: process = getprocessByName(batchDate, process_depend) #logging.info('process_depend %s --> state: %s ' % (process_depend, process.get('state'))) if process.get('state') == 'Done': #logging.info('process depend DONE: %s' % process_depend) map_str += (' %s Status: %s\n ---->\n' % (process_depend, process.get('state'))) else: late_parents_process.add(process.get('name')) get_process_parents(batchDate, getprocessByName(batchDate,process_depend)) Output: What I want it to look like Process_name ----> ['process dependencies 1', 'process dependencies 2'] ------>process dependencies 1 ----> [process dependencies 3, dependencies 4] ------>dependencies 3 -----> [] ------>dependencies 4 -----> [] ------>process dependencies 2 ----> [process dependencies 5] ------>process dependencies 5 -----> [process dependencies 6] ----->process dependencies 6 -----> [] Continue reading...