递归和列队

对着背影说爱祢 提交于 2020-02-20 05:53:22

一. 递归函数

# 递归调用:一个函数,调用了自身 称为递归调用
# 递归函数: 一个会调用自身的函数称为递归函数
# 凡是循环能干的事情 递归都能干

# 方式:

# 写出临界条件
# 我这一次和上一次的关系
# 假设当前函数已经能用 调用自身计算上一次结果 在求出本次的结果

# 输入一个数(大于等于1) 求 1+2+3.......的和
def sum1(n):
   sum=0
   for x in range(1,n+1):
        sum+=x
   return sum
res=sum1(5)

print(res)
def sum2(n):
    if n==1:
       return 1
    else:
       return n+sum2(n-1)

res=sum2(3)
print(res) #3
# 5+sum2(4)
# 5+4+sum2(3)
# 5+4+3+sum2(2)
# 5+4+3++2sum2(1)
# 5+4+3+2+1

# 模拟栈数据结构

# 压栈向栈里导入数据

a1=[]
a1.append("A")
print(a1)           #['A']

a1.append("B")
print(a1)           #['A', 'B']
a1.append("C")
print(a1)           #['A', 'B', 'C']


# 出栈
b1=a1.pop()
print(b1)   # C
print(a1)   # ['A', 'B']

b2=a1.pop()
print(b2)   # B
print(a1)   # ['A']

b3=a1.pop()
print(b3)    # A
print(a1)    # []

import collections
# 队列是先进先出
# 创建一个队列

import collections
# 队列是先进先出
# 创建一个队列

queue=collections.deque()
print(queue)              #deque([])              

# 进队
queue.append("1")
print(queue)           #deque(['1'])

queue.append("2")      
print(queue)           #deque(['1', '2'])

queue.append("3")
print(queue)           #deque(['1', '2', '3'])


# 出队取数据
a1=queue.popleft()
print(a1)            #1
print(queue)         #deque(['2', '3'])

a2=queue.popleft()
print(a2)           # 2
print(queue)        #deque(['3'])

a3=queue.popleft()
print(a3)            #3
print(queue)         # deque([])
 

# 深度遍历  利用 进栈 和 出栈  的知识1

import os
def getAllDir(path):
# 得到目录下的所有目录
   filesList=os.listdir(path)
    # 处理每一个文件、
   for fileName in filesList:


       # 判断路径  是否觉对路径  
      fileAbsPath=os.path.join(path,fileName)

      if os.path.isdir(fileAbsPath):

          print("目录"+fileName)

          getAllDir(fileAbsPath)
      else:
            print("普通文件"+fileName)

getAllDir(r"E:\Studypython\py2\dir")

# 深度遍历  利用 进栈 和 出栈  的知识2

import os
def getAllDirDE(path):

    stack=[]
    stack.append(path)
   # print(stack)                                    # ['E:\\Studypython\\py2\\dir']
   处理栈 当前栈为空的时候结束循环
    while len(stack)!=0:

         从栈里取出数据
          dirPath=stack.pop()
         # print(dirPath)                            # E:\Studypython\py2\dir
          目录下所有文件
          filesList=os.listdir(dirPath)
          #print(filesList)                          # ['.project', '2', 'app.js', 'controller', 'models', 'node_modules', 'package.json', 'public', 'uploads', 'views']
        
          处理每一个文件 如果是普通文件则打印 如果是目录则将改目录的地址压栈
          for fileName in filesList:
               
             # print(fileName)                        # .project 2 app.js controller models node_modules package.json public uploads views

              fileAbsPath=os.path.join(dirPath,fileName)

              #print(fileAbsPath)
                #E:\Studypython\py2\dir\.project
                # E:\Studypython\py2\dir\2
                # E:\Studypython\py2\dir\app.js
                # E:\Studypython\py2\dir\controller
                # E:\Studypython\py2\dir\models
                # E:\Studypython\py2\dir\node_modules
                # E:\Studypython\py2\dir\package.json
                # E:\Studypython\py2\dir\public
                # E:\Studypython\py2\dir\uploads
                # E:\Studypython\py2\dir\views
                # 
              if os.path.isdir(fileAbsPath):

                  是目录就压栈
                print("目录---"+fileName)
                    # 目录---2
                    # 目录---controller
                    # 目录---models
                    # 目录---node_modules
                    # 目录---public
                    # 目录---uploads
                    # 目录---views
                stack.append(fileAbsPath)
                 #print(stack)
                    #['E:\\Studypython\\py2\\dir\\2']
                    # ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller']
                    # ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller', 'E:\\Studypython\\py2\\dir\\models']
                    # ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller', 'E:\\Studypython\\py2\\dir\\models', 'E:\\Studypython\\py2\\dir\\node_modules']
                    # ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller', 'E:\\Studypython\\py2\\dir\\models', 'E:\\Studypython\\py2\\dir\\node_modules', 'E:\\Studypython\\py2\\dir\\public']
                                   
              else:

                     打印普通文件
                  print("普通文件--"+fileName)

      #                   普通文件--.project
                        # 普通文件--app.js
                        # 普通文件--package.json
                        # 普通文件--album.ejs
                        # 普通文件--err.ejs
                        # 普通文件--index.ejs
                        # 普通文件--1 - 副本.jpg
                        # 普通文件--1.jpg
                        # 普通文件--2 - 副本.jpg
                        # 普通文件--2.jpg
                        # 普通文件--3 - 副本.jpg
                        # 普通文件--3.jpg
                        # 普通文件--4 - 副本.jpg
                        # 普通文件--4.jpg
                        # 普通文件--5 - 副本.jpg
                        # 普通文件--5.jpg
                        # 普通文件--bootstrap.js
                        # 普通文件--bootstrap.min.js
                        # 普通文件--jquery-1.12.4.js
                        # 普通文件--npm.js
                        # 普通文件--1.jpg
                        # 普通文件--2.jpg
                        # 普通文件--4.png
 

getAllDirDE(r"E:\Studypython\py2\dir")

# 队列就是先进去的 就先走           相当于排队  

 

import collections
import os


# 队列是先进先出

def aa(path):
   # 创建一个队列
   queue=collections.deque()
   # 进队
   queue.append(path)
   while len(queue)!=0:
      # 出队取数据
      dirPath=queue.popleft()
      # 找出所有文件
      filesList=os.listdir(dirPath)
      for fileName in filesList:

            # 绝对路径
         fileAbsPath=os.path.join(dirPath,fileName)
            #print(fileAbsPath)
                # E:\Studypython\py2\dir\.project
                # E:\Studypython\py2\dir\2
                # E:\Studypython\py2\dir\app.js
                # E:\Studypython\py2\dir\controller
                # E:\Studypython\py2\dir\models
                # E:\Studypython\py2\dir\node_modules
                # E:\Studypython\py2\dir\package.json
                # E:\Studypython\py2\dir\public
                # E:\Studypython\py2\dir\uploads
                # E:\Studypython\py2\dir\views
          # 判断是否为目录
         if os.path.isdir(fileAbsPath):
            print("目录-----"+fileName)
              #目录-----controller
              # 目录-----models
              # 目录-----node_modules
            queue.append(fileAbsPath)
         else:
             print("普通文件-----"+fileName)


   #           普通文件-----index.js
            # 普通文件-----callsite-tostring.js
            # 普通文件-----event-listener-count.js
            # 普通文件-----index.js
aa(r"E:\Studypython\py2\dir")

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!