您好,欢迎访问一九零五行业门户网

python什么是递归?两种优先搜索算法的实现 (代码示例)

本篇文章给大家带来的内容是介绍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什么是递归?两种优先搜索算法的实现 (代码示例)的详细内容。
其它类似信息

推荐信息