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学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
随机推荐
- Idea中JavaWeb项目部署
1. 添加应用服务器tomcat 2. 将tomcat配置添加到项目中 artifacts配置:添加deploy, 添加artifacts,选择Web Application: Exploded &g ...
- java代码自动下载Spring Boot用户手册
本示例演示Spring Boot 1.5.9.RELEASE版本的用户手册下载 pom.xml <?xml version="1.0" encoding="UTF- ...
- [NOIP]2017列队——旋转treap/非旋转treap
Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m名学生,方阵的行数为 n,列数为m. 为了便 ...
- Matplotlib学习---matplotlib的一些基本用法
Matplotlib有两种接口,一种是matlab风格接口,一种是面向对象接口.在这里,统一使用面向对象接口.因为面向对象接口可以适应更复杂的场景,在多图之间进行切换将变得非常容易. 首先导入matp ...
- 【hdu 5628】Clarke and math (Dirichlet卷积)
hdu 5628 Clarke and math 题意 Given f(i),1≤i≤n, calculate \(\displaystyle g(i) = \sum_{i_1 \mid i} \su ...
- css标准文档流
css标准文档流 所谓的标准文档流指的是网页当中的一个渲染顺序,就如同人类读书一样,从上向下,从左向右.网页的渲染顺序也是如此.而我们使用的标签默认都是存在于标准文档流当中. 标准文档流当中的特性 空 ...
- SCOI2016 Day1 简要题解
目录 「SCOI2016」背单词 题意 题解 代码 「SCOI2016」幸运数字 题意 题解 总结 代码 「SCOI2016」萌萌哒 题意 题解 总结 代码 「SCOI2016」背单词 题意 这出题人 ...
- BZOJ 3514: Codechef MARCH14 GERALD07加强版(LCT + 主席树)
题意 \(N\) 个点 \(M\) 条边的无向图,询问保留图中编号在 \([l,r]\) 的边的时候图中的联通块个数. \(K\) 次询问强制在线. \(1\le N,M,K \le 200,000\ ...
- awk文本分析工具
Usage:awk [option] 'program' file ... awk [option] -f progfile file ... [optin]: -F fs 指定输入分隔符,fs可是字 ...
- 【BZOJ5336】[TJOI2018]party(动态规划)
[BZOJ5336][TJOI2018]party(动态规划) 题面 BZOJ 洛谷 题解 这题好神仙啊... 考虑普通的\(LCS\)的\(dp\),\(f[i][j]=\max\{f[i-1][j ...