首页 > 其他分享 >更好的递归脚本

更好的递归脚本

时间:2024-08-21 22:51:00浏览次数:15  
标签:脚本 更好 递归 Enqueue 队列 queue currentDirectory Directory

当函数调用自身时,这称为“递归”。当脚本想要遍历文件系统的一部分时,你经常可以看到这种技术:一个函数处理文件夹内容,当它遇到一个子文件夹时,它会调用自己。

递归可能很强大,但它很难调试并且可能很危险,因为当你犯错误时,你最终会陷入无休止的循环。此外,当递归深度过高时,始终存在堆栈溢出的风险。

许多通常需要递归的任务也可以通过使用“队列”来设计:当你的代码遇到一个新任务时,新任务不是再次调用自身,而是被放置在队列中,一旦初始任务完成,队列中剩下的任何事情都会被处理。

有一个简单的示例,它遍历了整个驱动器 C:\,但不使用递归。相反,您可以看到运行中的队列:

# get a new queue
[System.Collections.Queue]$queue = [System.Collections.Queue]:: new()
# place the initial search path(s) into the queue
$queue.Enqueue('c:\')
# add as many more search paths as you need
# they will eventually all be traversed
#$queue.Enqueue('D:\')
 
# while there are still elements in the queue...
    while ($queue.Count -gt 0)
    {
        # get one item off the queue
        $currentDirectory = $queue.Dequeue()
        try
        {
            # find all subfolders and add them to the queue
            # a classic recurse approach would have called itself right here
            # this approach instead pushes the future tasks just onto
            # the queue for later use
            [IO.Directory]::GetDirectories($currentDirectory) | ForEach-Object {
                $queue.Enqueue($_)
            }
        }
        catch {}
    
        try
        {
            # find all files in this folder with the given extensions
            [IO.Directory]::GetFiles($currentDirectory, '*.psm1' )
            [IO.Directory]::GetFiles($currentDirectory, '*.ps1' )
        }
        catch{}
    } 

标签:脚本,更好,递归,Enqueue,队列,queue,currentDirectory,Directory
From: https://blog.csdn.net/weixin_71228606/article/details/141336965

相关文章

  • LoadRunner 12.55 解决录制 HTTPS网站,脚本空白问题
    背景:最近工作中项目有性能测试需求,但团队小伙伴用loadrunner12.55遇到https站点录制出来的脚本Action为空白,以往处理方式直接让项目团队将https改成http再重新录制痛点:修改http耗时长分析:项目web主要是内网使用,使用自签名证书,而loadrunner无该证书导致LoadrunnerProxyServer......
  • Python自动化脚本学习整理
     10个常用Python自动化脚本https://blog.csdn.net/csdn1561168266/article/details/135757528?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172422930716800184162692%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1724229307168......
  • ffmpeg批量mov转换mp4格式脚本
    vim convertMP4.sh 输入脚本:#!/bin/bash#检查是否提供了输入目录路径if[-z"$1"];thenecho"Usage:$0<input_directory>"exit1fi#获取输入目录路径input_directory="$1"#检查输入目录是否存在if[!-d"$input_directory"];......
  • 在 PowerShell 脚本中调用 msiexec 进行静默安装,可以通过设置 msiexec 的参数来实现。
    在PowerShell脚本中调用msiexec进行静默安装,可以通过设置msiexec的参数来实现。静默安装意味着在安装过程中不会弹出用户界面,也不会进行用户交互。下面是一个示例,演示如何使用PowerShell脚本执行静默安装。示例PowerShell脚本powershellCopyCode#MSI文件的路径$m......
  • Java并发编程 - JUC介绍、JUC锁(公平锁、非公平锁、可重入锁/递归锁、自旋锁、Reentran
    Java并发编程中的java.util.concurrent(简称JUC)包提供了许多高级并发工具和类,使得开发人员能够更加方便地编写高性能的并发程序。下面将详细介绍JUC包中的一些锁相关的概念和类。JUC介绍java.util.concurrent包提供了许多高级并发工具类,包括但不限于Executor框架......
  • 产线一直在用的 RabbitMQ 搭建教程(含负载均衡配置,验证脚本,监控案例),偷偷抄出来的,建议收
    本文介绍公司一直在用的rabbitmq集群安装部署过程,版本不算太新,但一直稳定运行,对其他版本安装也有一定的参考价值,建议收藏备用。简介官网:https://www.rabbitmq.com/RabbitMQ是一个开源的遵循AMQP(AdvancedMessageQueuingProtocol)协议实现的基于Erlang语言编写,支......
  • BST 二叉搜索树 BinarySearchTree C++实现(递归/非递归)
    目录二叉搜索树基本概念常用结论用途二叉搜索树的性能分析二叉搜索树的操作查找插入删除代码实现BSTree.hpptest.cc二叉搜索树基本概念二叉搜索树(BST,BinarySearchTree)二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树......
  • C语言函数递归
    前言与概述本文章将通过多个代码并赋予图示,详细讲解C语言函数递归的定义和函数递归的运算过程。函数递归定义程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。它通常把一个大型......
  • C语言:递归
    递归简单来说就是函数自己调用自己。特点:一般代码比较简洁,没有出口。例子1:用一个函数计算阶乘#include<stdio.h>//不用递归intfac(intn){ intval=1; for(inti=1;i<=n;i++) { val*=i; } returnval;}//用递归intfac1(intn){ if(n==1) {......
  • 零壹塔(力扣,递归,找父节点)
    https://leetcode.cn/problems/k-th-symbol-in-grammar/0/\01/\/0110/\/\/\/\01101001#include<iostream>usingnamespacestd;intsolve(i......