Python递归函数

Python递归函数

递归函数的作用

#案例:计算n的阶乘

#求n的阶乘
"""
n! = 1*2*3*...n
1! = 1
2! = 2*1 = 2*1!
3! = 3*2*1 = 3*2!
n! = n*(n-1)!
function = n *(function-1)
"""
#使用循环
# def calNum(num):
    # i = 1
    # result = 1
    # while i <= num:
    #     result *= i  #等价于result = result * i
    #     i += 1
    # result = 1
#     for i in range(1,num+1):
#         result *= i
#     return result
# print(calNum(5))

#使用递归
def calNum(num):
    if num > 1:
        result = num * calNum(num - 1)
    else:
        result = 1
    return result
#调用函数
print(calNum(5))

#注意:不能出现死循环

递归遍历目录

import os

def getAllFileDir(path,sp=''): #path传入的路径
    #获取当前目录下所有的文件和目录
    fileList = os.listdir(path)
    #处理每个文件直接的分隔符
    sp += '-'
    #获取所有的文件,如果是目录使用递归继续遍历,如果是文件直接打印
    for fileName in fileList:
        #获取文件的路径(用绝对路径)
        fileAbsPath = os.path.join(path,fileName) #判断是否是路径
        #判断哪些是目录
        if os.path.isdir(fileAbsPath):
            print(sp+'目录:',fileName)
            #使用递归继续遍历
            getAllFileDir(fileAbsPath,sp)
        else: #文件直接打印
            print(sp+'文本文件:',fileName)

#调用函数
getAllFileDir('C:\python课程大纲\python课程大纲')

栈模拟递归遍历目录

import os
"""
栈-->又名堆栈
栈数据结构原理
先进后出

装子弹
"""
#使用列表模拟堆栈
stack = []
#入栈
stack.append('A')
stack.append('B')
stack.append('C')
print(stack)
#出栈
stack.pop()
stack.pop()
print(stack)

def getAllFileDir(path):
    #创建一个栈
    stack = []
    #入栈
    stack.append(path)
    #处理栈,当栈为空的时候结束循环
    while len(stack) != 0:
        #出栈
        outDir = stack.pop()
        #获取当前目录下所有文件
        fileList = os.listdir(outDir)
        # 获取所有的文件,如果是目录继续入栈,如果是文件直接打印
        for fileName in fileList:
            #获取文件的路径(使用绝对路径)
            fileAbsPath = os.path.join(outDir,fileName)
            #判断是否是目录
            if os.path.isdir(fileAbsPath):
                print('目录:',fileName)
                #继续入栈
                stack.append(fileAbsPath)
            else: #直接打印文本文件
                print('文本文件:',fileName)
#调用函数
getAllFileDir('C:\python课程')

队列模拟遍历目录

import collections
import os
"""
队列数据结构的原理
先进先出

使用场景:到银行排队办理业务

import collections

deque:创建一个队列
append:往队列添加元素
popLeft():删除队列里面的元素
len:获取队列元素的个数

listDir()获取目录下所有的文件
isDir()判断是否是一个目录
"""
#模拟这个过程
#创建一个队列
# quequ = collections.deque()
#入队
# quequ.append('A')
# quequ.append('B')
# print(quequ)
#出队
# quequ.popleft()
# print(quequ)

def getAllFileDir(path):
    #创建一个队列
    queue = collections.deque()
    #入队
    queue.append(path)
    # 处理队列,当队列为空的时候结束循环
    while len(queue) != 0 :
        #出队
        outDir = queue.popleft()
        #获取当前目录下所有的文件
        fileList = os.listdir(outDir)
        # 获取所有的文件,如果是目录继续入队,如果是文件直接打印
        for fileName in fileList:
            #获取当前路径(使用绝对路径)
            fileAbsPath = os.path.join(outDir,fileName)
            #判断是否是目录
            if os.path.isdir(fileAbsPath):
                print('目录:',fileName)
                #继续入队
                queue.append(fileAbsPath)
            else:
                print('文本文件:',fileName)

#调用函数
getAllFileDir('C:\python课程')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值