Python 跟踪递归链表?

Python 跟踪递归链表?,python,recursion,trace,Python,Recursion,Trace,我将给出一个简单的例子: def find2_rec(head, o): '''(LLNode, obj) -> LLNode ''' if head == None: result = (None, None) elif head.data == o: result = (head, None) else: (at_node, before_node) = find2_rec(head.next, o

我将给出一个简单的例子:

def find2_rec(head, o):
    '''(LLNode, obj) -> LLNode
    '''
    if head == None:
        result = (None, None)
    elif head.data == o:
        result = (head, None)
    else:
        (at_node, before_node) = find2_rec(head.next, o)
        if head.next == at_node != None:
            before_node = head
        result = (at_node, before_node)
    return result
假设您得到了LLNode,它只是数据和下一个。此函数仅返回对象与其上一个对象(例如,链接列表)关联的节点

a = [1] -> [2] -> [3] -> [4] -> [5]
find2_rec(a,3)->

是输出。我的问题是如何追踪这一点

我习惯于正常的递归,我喜欢这样写:

(列表示例的基本递归和)

现在,什么是最合适的方式来为LL做这件事

我正在寻找的示例:

a = [1] -> [2] -> [3] -> [4] -> [5]
让我们再说一遍,对于find2_rec(a,3),我会将其跟踪为

[1] -> [2] -> [3] -> [4] -> [5]
       [2] -> [3] -> [4] -> [5]
              [3] -> [4] -> [5]
                  return [3] -> [4] -> [5], None
           return ([3] -> [4] -> [5], [2] -> [3] -> [4] -> [5])
    return ([3] -> [4] -> [5], [2] -> [3] -> [4] -> [5])

这么小的东西写得太多了。有更好的方法吗?

这是为了可视化执行吗?我想我不明白你到底想要什么。这有助于我理解。一般来说,我会向人们推荐可视化的东西,但仍然不完全清楚你在寻找什么,但我相信这会有所帮助。我举了一个例子。Python tutors会经历非常缓慢的每一步,有没有更快的方法呢?您可能会从Python tutors那里得到类似的东西,方法是在return语句处放置一个断点(在执行页面上单击它)但是从实际的代码来看,你不能在函数的开头放一个print语句来显示
head
参数,然后在返回之前再放一个print语句来显示返回的内容吗?(也可能是一个
indent
参数,用于为打印添加间距,并在递归调用中递增)
a = [1] -> [2] -> [3] -> [4] -> [5]
[1] -> [2] -> [3] -> [4] -> [5]
       [2] -> [3] -> [4] -> [5]
              [3] -> [4] -> [5]
                  return [3] -> [4] -> [5], None
           return ([3] -> [4] -> [5], [2] -> [3] -> [4] -> [5])
    return ([3] -> [4] -> [5], [2] -> [3] -> [4] -> [5])