递归函数中没有return |
您所在的位置:网站首页 › 递归函数一定要有返回值吗 › 递归函数中没有return |
递归函数在Python实现决策树算法中出现过,这里记录下关于递归函数return的理解,以及递归函数的执行流程 假如有一个列表[4, [3, [2, [1]]]],现在要你计算这个列表里所有数字的和,该怎么实现呢? 先遍历最外面的列表,如果是数字,就累加,如果是列表,就继续遍历这个列表,这个列表里面的元素是数字,就累加,如果是列表,则继续遍历…遍历完最后一个数字后,将层层递归函数的累加值,原路返回,层层return出去,期间每层递归函数return的累加值需要和上一层递归函数的累加值相加,最终,函数终止时return的累加值就是我们需要的所有列表内数字之和了,下面是示意图: 下面看个复杂的,用递归的方法算出决策树的层数,决策树如下图所示: 1.从第一个判断节点开始,最大层数置为0,遍历该判断节点下的所有子节点; 2.如果子节点是叶子节点,那么,当前层数记为1,最大层数和当前层数中,较大的值置为最大层数,然后遍历下一个子节点; 3.如果子节点为判断节点,那么,重复1的操作; 4.如果当前遍历的是叶子节点,且是最后一个,那么,递归结束,将值层层return回上层函数,直至最开始的递归函数层,程序终止 代码如下 data = {'no surfacing': {0: 'no', 1: {'flippers': {0: {'head': {0: 'no', 1: {'fin': {0: 'no', 1: 'yes'}}}}, 1: {'warm blooded': {0: {'gill': {0: 'no', 1: {'jaw': {0: 'no', 1: 'yes'}}}}, 1: 'no'}}}}}} def get_tree_depth(my_tree): max_depth = 0 my_tree = list(my_tree.values())[0] for value in my_tree.values(): this_depth = 1 if isinstance(value, dict): # 字典,即节点,需要进行一次递归 r_max_depth = get_tree_depth(value) # print(r_max_depth, this_depth) this_depth += r_max_depth # print(this_depth, max_depth) max_depth = max(this_depth, max_depth) # print(max_depth) return max_depth if __name__ == '__main__': print(get_tree_depth(my_tree))程序内部逻辑执行流程图: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |