You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl递归计算文件夹深度函数异常问题求助

问题分析与修复

你的Perl代码计算目录深度时出错,核心问题有两个:

1. 全局变量导致递归状态混乱

代码中$counter和$max_count未声明为局部变量,属于全局作用域。递归调用时,不同层级的函数会共享这两个变量的值,导致数值被随意覆盖,无法正确追踪当前递归层级。

2. 逻辑错误:混淆了子目录数量与层级深度

原代码的逻辑是统计当前目录下的子目录数量,而非递归的层级深度。每次进入子目录后$counter++,递归返回后直接将$counter置0,完全忽略了子目录内部的层级深度,自然无法得到正确结果。

修复后的代码

sub max_depth {
    my ($root) = @_;
    my $current_max = 0;

    # 遍历当前目录下的所有条目
    for my $f (glob "$root/*") {
        # 如果是目录,递归计算其深度并加1(当前子目录为一层)
        if (-d $f) {
            my $sub_depth = max_depth($f) + 1;
            $current_max = $sub_depth if $sub_depth > $current_max;
        }
    }

    return $current_max;
}

my $col_number = max_depth($path);  # $path 为目标目录路径
print $col_number;

代码说明

  • 使用局部变量$current_max记录当前目录的最大子目录深度,避免递归时的状态干扰。
  • 递归计算每个子目录的深度,返回值加1代表当前子目录的层级,最终取所有子目录深度的最大值作为当前目录的深度。
  • 若目录没有子目录,返回0,符合“内部子目录层级数”的定义。

测试时,当$path为/*****/Task9会返回4,设为/*****/Task9/new时返回3,与预期一致。

内容的提问来源于stack exchange,提问作者Priyansh Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:35:14