如何区分头递归与尾递归?请问这段Python代码是否为尾递归?
这段统计可见树节点的代码不是尾递归
先明确尾递归的核心判定标准
尾递归的关键是:递归调用必须是函数的最后一个执行操作。也就是说,调用递归之后,当前函数不需要再做任何计算、累加或其他操作,直接把递归的返回值作为自身的返回值——当前栈帧的所有数据在递归调用后都没用了,编译器/解释器可以直接复用栈帧优化。
结合你的代码分析
看dfs函数的执行流程:
- 先处理当前节点:判断节点值是否大于等于当前最大值,更新
current_max和初始total - 调用左子树的
dfs,但调用后还要把返回值加到total里——这说明递归调用后还有后续操作,不是函数的最后一步 - 再调用右子树的
dfs,同样要把返回值加到total里,依然不是最后一步 - 最后才返回累加后的
total
另外,这段代码里存在两次递归调用(左、右子树),而尾递归只能有一次递归调用——毕竟不可能让两个调用同时成为函数的最终执行步骤。
补充:和头递归的区别
头递归是先执行递归调用,再处理当前节点的逻辑(比如先递归遍历左子树,再处理当前节点的值)。你的代码是先处理当前节点,再递归子树,所以也不属于头递归。
内容的提问来源于stack exchange,提问作者BigD
相关产品推荐
相关产品推荐

