本篇文章给大家带来的内容是介绍python什么是递归?两种优先搜索算法的实现 (代码示例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
一、递归原理小案例分析(1)# 概述递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到!(2)# 写递归的过程1、写出临界条件 2、找出这一次和上一次关系 3、假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果 (3)案例分析:求1+2+3+...+n的数和# 概述'''递归:即一个函数调用了自身,即实现了递归凡是循环能做到的事,递归一般都能做到!'''# 写递归的过程'''1、写出临界条件2、找出这一次和上一次关系3、假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果'''# 问题:输入一个大于1 的数,求1+2+3+....def sum(n): if n==1: return 1 else: return n+sum(n-1)n=input(请输入:)print(输出的和是:,sum(int(n)))'''输出:请输入:4输出的和是: 10'''
#__author:吉*佳#date: 2018/10/21 0021#function:import osdef getalldir(path): filelist = os.listdir(path) print(filelist) for filename in filelist: fileabspath = os.path.join(path,filename) if os.path.isdir(fileabspath): print($$目录$$:,filename) getalldir(fileabspath) else: print(**普通文件!**,filename) # print(filelist) passgetalldir(g:\\)
输出结果如下:
二、深度遍历与广度遍历(一)、深度优先搜索说明:深度优先搜索借助栈结构来进行模拟深度遍历示意图:
说明:先把a压栈进去,在a出栈的同时把b c压栈进去,此时让b出栈的同时把de压栈(c留着先不处理) 同理,在d出栈的时候,h i压栈,最后再从上往下取出栈内还未出栈的元素,即达到深度优先遍历。案例实践:利用栈来深度搜索打印出目录结构
程序代码:#__author:吉**#date: 2018/10/21 0021#function:# 深度优先遍历目录层级结构import osdef getalldirdp(path): stack = [] # 压栈操作,相当于图中的a压入 stack.append(path) # 处理栈,当栈为空的时候结束循环 while len(stack) != 0: #从栈里取数据,相当于取出a,取出a的同时把bc压入 dirpath = stack.pop() firstlist = os.listdir(dirpath) #判断:是目录压栈,把该目录地址压栈,不是目录即是普通文件,打印 for filename in firstlist: fileabspath=os.path.join(dirpath,filename) if os.path.isdir(fileabspath): #是目录就压栈 print(目录:,filename) stack.append(fileabspath) else: #是普通文件就打印即可,不压栈 print(普通文件:,filename)getalldirdp(r'e:\[aaa](千)全栈学习python\18-10-21\day7\temp\dir')
结果:
该过程示意图解释:(s-05-1部分)
原理分析:
说明: 队列是 先进先出的模型。a先进队,在a出队的时候,c b入队,按图示,c出队,fg 入队,b出队,de入队,f出队,jk入队,g出队,无入队,d出队,h i入队,最后e j k h i出队,均无入队了,即每一层一层处理、故:先进先出的队列结构实现了广度优先遍历。 先进后出的栈结构实现的是深度优先遍历。代码实现:其实深度优先和广度优先在代码书写上是差别不大的,基本相同,只是一个是使用栈结构(用列表进行模拟)另一个(广度优先遍历)是使用了队列的数据结构来达到先进先出的目的。#__author:吉**#date: 2018/10/21 0021#function:# 广度优先搜索模拟# 利用队列来模拟广度优先搜索import osimport collectionsdef getalldirit(path): queue=collections.deque() #进队 queue.append(path) #循环,当队列为空,停止循环 while len(queue) != 0: #出队数据 这里相当于找到a元素的绝对路径 dirpath = queue.popleft() # 找出跟目录下的所有的子目录信息,或者是跟目录下的文件信息 dirlist = os.listdir(dirpath) #遍历该文件夹下的其他信息 for filename in dirlist: #绝对路径 dirabspath = os.path.join(dirpath,filename) # 判断:如果是目录dir入队操作,如果不是dir打印出即可 if os.path.isdir(dirabspath): print(目录:+filename) queue.append(dirabspath) else: print(普通文件:+filename)# 函数的调用getalldirit(r'e:\[aaa](千)全栈学习python\18-10-21\day7\temp\dir')
广度优先运行输出结构:先图解:按照每一层从左到右遍历即可实现。
结束!
以上就是python什么是递归?两种优先搜索算法的实现 (代码示例)的详细内容。