函数递归,栈,队列,及三者目录遍历

一、函数递归

函数递归:一个函数调用自身,则这个函数被称为递归函数,这种现象被称为函数的递归

递归中包含了一种隐式的循环,他会重复执行某段代码,但是这种循环无需用循环语句进行控制

使用递归解决问题的简单思路:

​ a.写出临界条件

​ b.需要找到当前的循环和上一次循环之间的关系

​ c.根据规律实现

二、栈和队列

1.栈

stack

抽象成一个开口向上的容器【羽毛球球筒】

特点:先进后出

#创建一个栈【列表】
my_stack = []

#入栈【向栈中存数据】:append
my_stack.append(23)
print(my_stack)
my_stack.append(30)
print(my_stack)
my_stack.append(4)
print(my_stack)
my_stack.append(11)
print(my_stack)
my_stack.append(20)
print(my_stack)

#出栈【从栈中取数据】:pop
#pop每调用一次,则取出一个数据,先添加进去的最后被取出来【先进后出】
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)
2.队列

queue

抽象成一个水平放置的水管

特点:先进先出

import  collections

#创建队列
queue = collections.deque([12,43,8,10])
print(queue)


#入队【存数据】,append
queue.append(66)
print(queue)
queue.append(77)
print(queue)
#deque([12, 43, 8, 10, 66, 77])

#出队【取数据】,popleft
queue.popleft()
print(queue)
queue.popleft()
print(queue)
queue.popleft()
print(queue)

三、目录遍历

1.递归遍历目录
import  os


#递归
def getAll(path):
    #列出path下所有的文件夹以及文件
    filelist = os.listdir(path)
    #print(filelist)

    for filename in filelist:
        #拼接路径
        filepath = os.path.join(path,filename)
        #print(filepath)

        if os.path.isdir(filepath):
            print("目录:",filename)
            #使用递归
            getAll(filepath)
        else:
            print("文件:",filename)

dir_path = r"C:\Users\Administrator\Desktop\Python"
getAll(dir_path)
2.栈模拟递归遍历

深度遍历

import  os

#栈
def getAll(path):
    #创建一个空栈
    stack = []

    #将初始路径添加到栈中
    stack.append(path)

    while len(stack) != 0:
        #从栈中取出数据
        dirpath = stack.pop()

        #获取当前路径下所有的文件夹以及文件
        filelist = os.listdir(dirpath)

        #遍历列表
        for filename in filelist:
            #拼接路径,二级目录下的文件路径
            filepath = os.path.join(dirpath,filename)

            #判断是否是目录
            if os.path.isdir(filepath):
                #将新的路径添加到栈中
                print("目录:",filename)
                stack.append(filepath)      #类似于递归

            else:
                print("普通文件:",filename)


dir_path = r"C:\Users\Administrator\Desktop\Python"
getAll(dir_path)
3.队列模拟递归遍历

广度遍历

import  collections
import  os

def getAll(path):
    #创建一个空队列
    queue = collections.deque()

    #入队
    queue.append(path)

    while len(queue) != 0:
        #出队
        dirpath = queue.popleft()

        #获取当前路径下所有的文件夹以及文件
        filelist = os.listdir(dirpath)

        #遍历列表
        for filename in filelist:
            #拼接路径,二级目录下的文件路径
            filepath = os.path.join(dirpath,filename)

            #判断是否是目录
            if os.path.isdir(filepath):
                #将新的路径添加到栈中
                print("目录:",filename)
                queue.append(filepath)      #类似于递归

            else:
                print("普通文件:",filename)


dir_path = r"C:\Users\Administrator\Desktop\Python"
getAll(dir_path)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值