Python递归_打印节点信息
Python递归_打印节点信息
递归特性:
1、必须由一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致
栈溢出)
一、需求1:打印所有的节点
[root@db01 test]# cat duigui1.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
"""
递归特性:
1、必须由一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致
栈溢出)
"""
# 递归练习题
menus = [
{
'text':'北京',
'children':[
{'text':'朝阳','children':[]},
{'text':'昌平','children':[
{'text':'沙河','children':[]},
{'text':'回龙观','children':[]}
]}
]
},
{
'text':'上海',
'children':[
{'text':'宝山','children':[]},
{'text':'金山','children':[]}
]
}
] # 1、打印所有的节点
# 2、输入一个节点名字,你要遍历找,找到了,就打印它,并返回true。 def print_nodes(menus):
for sub_menu in menus:
menu_parent_text = sub_menu['text']
menu_children = sub_menu['children']
if menu_parent_text:
print(menu_parent_text)
print('\t',menu_children)
print_nodes(menus)
[root@db01 test]# # 执行结果 [root@db01 test]# python3 duigui1.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
[root@db01 test]#
二、需求2:打印所有的节点,输入一个节点名字,你要遍历找,找到了,就打印它,并返回true
[root@db01 test]# cat duigui2.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
"""
递归特性:
1、必须由一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,
栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致
栈溢出)
"""
# 递归练习题
menus = [
{
'text':'北京',
'children':[
{'text':'朝阳','children':[]},
{'text':'昌平','children':[
{'text':'沙河','children':[]},
{'text':'回龙观','children':[]}
]}
]
},
{
'text':'上海',
'children':[
{'text':'宝山','children':[]},
{'text':'金山','children':[]}
]
}
] # 2、打印所有的节点,输入一个节点名字,你要遍历找,找到了,就打印它,并返回true。
def print_nodes(menus):
for sub_menu in menus:
menu_parent_text = sub_menu['text']
menu_children = sub_menu['children']
if menu_parent_text:
print(menu_parent_text)
print('\t',menu_children)
print_nodes(menus) def print_node(menu,node,layer):
for sub_menu in menu:
menu_parents_text = sub_menu["text"]
menu_children_node = sub_menu["children"]
#print("menu_parents_text = ",menu_parents_text)
if node == menu_parents_text:
print("找到%s在第%s层" %(node,layer)) # 返回到外层
return True
else:
if print_node(menu_children_node,node,layer+1) == True: # 如果里层返回True,继续向上返回True
return True
node_input = input("请输入一个节点的名字>:").strip()
print(print_node(menus,node_input,1)) [root@db01 test]# # 执行结果
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:海口
None
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:东城区
None
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:沙河
找到沙河在第3层
True
[root@db01 test]# python3 duigui2.py
北京
[{'text': '朝阳', 'children': []}, {'text': '昌平', 'children': [{'text': '沙河', 'children': []}, {'text': '回龙观', 'children': []}]}]
上海
[{'text': '宝山', 'children': []}, {'text': '金山', 'children': []}]
请输入一个节点的名字>:金山
找到金山在第2层
True
[root@db01 test]#
Python递归_打印节点信息的更多相关文章
- Python traceback 模块, 打印异常信息
Python感觉是模仿Java, 到处都需要加try..catch.... 这里记录一下用法,方便后续使用. # -*- coding:utf-8 -*- import os import loggi ...
- [已解决] Python logging 重复打印日志信息
问题描述 问题代码如下: def get_logger(logger_name): """得到日志对象""" logger = loggin ...
- php_公共方法01_传入数组_打印可见信息
function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'convert', $str ...
- php 数据集转换树、递归重组节点信息多维数组(转)
一.将数据集转换成树 /** * 将返回的数据集转换成树 * @param array $list 数据集 * @param string $pk 主键 * @param string $pid 父节 ...
- [python]打印异常信息的不同方式
异常捕获 try: execpt Exception as e: print(str(e)) 打印异常信息的方式 1.str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型,如1/0的异常 ...
- python使用进程池多进程时,如何打印错误信息
一.说明 1.python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息. 2.如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了. 二.具体方法如下: ...
- java 递归及其经典应用--求阶乘、打印文件信息、计算斐波那契数列
什么是递归 我先看下百度百科的解释: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即 ...
- python学习(五)--打印错误信息
from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
随机推荐
- Nginx 建立三次握手
L:123 我们可以用以下命令查看请求状态 netstat -anp | grep tcp
- 关于jQuery.when()用法
1.该方法在jQuery1.5开始被引入. 2.用法测试 a. var url1 = "/resource/ar/hometab/index_tab_games.json", ur ...
- mysql,mybatis模糊查询
<if test="deviceType != null and deviceType != ''">and device_type like CONCAT('%', ...
- mysql操作命令
一.MySQL连接命令 mysql-u:指定用户-p:指定密码-S:指定socket文件-P:指定端口-h:指定主机域-e:指定sql语句 mysql> status \s 查看状态 mysql ...
- 洛谷P2085最小函数值题解
题目 首先我们先分析一下题目范围,\(a,b,c\) 都是整数,因此我们可以得出它的函数值在\((0,+\infty )\)上是单调递增的,,然后我们可以根据函数的性质,将每个函数设置一个当前指向位置 ...
- 使用tree命令导出文件夹/文件的目录树
前提:己安装扩展: 介绍: TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称.(带扩展名) /A 使用 ASCII 字符,而不使用扩展字符. t ...
- bzoj2212[Poi2011]Tree Rotations [线段树合并]
题面 bzoj ans = 两子树ans + min(左子在前逆序对数, 右子在前逆序对数) 线段树合并 #include <cstdio> #include <cstdlib> ...
- NOIP2018退役记(记事)
希望还是要有的,万一退役了呢? Day1 听说300是大众分? 不会T2,不会T3,再别OI. Day2 听说200是大众分? T1FST掉,不会T2,不会T3,再别OI. 茶馆小人书 那些让我们聊以 ...
- 参考RPC
普遍RPC在客户端需要提供接口,如果不提供则无法进行调用.同时,因为客户端也依赖提供的接口,服务端的升级.优化所带来的更新,客户端也要及时的更新API,否则会带来影响.这样,就带来了依赖接口,常常更新 ...
- ELK部署详解--logstash
logstash.yml # Settings file in YAML## Settings can be specified either in hierarchical form, e.g.:# ...