遞歸和列隊

一. 遞歸函數node

# 遞歸調用:一個函數,調用了自身 稱爲遞歸調用
# 遞歸函數: 一個會調用自身的函數稱爲遞歸函數
# 凡是循環能幹的事情 遞歸都能幹python

# 方式:jquery

# 寫出臨界條件
# 我這一次和上一次的關係
# 假設當前函數已經能用 調用自身計算上一次結果 在求出本次的結果npm

# 輸入一個數(大於等於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

# 模擬棧數據結構json

# 壓棧向棧裏導入數據bootstrap

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([])
 

# 深度遍歷  利用 進棧 和 出棧  的知識1app

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")

# 隊列就是先進去的 就先走           至關於排隊  spa

 

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")
相關文章
相關標籤/搜索