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

如何将文件大小求和函数转为递归函数?求转换方法

修改后的递归版本代码
import os

def recls_rtsize(argpath):
    sumsize = 0
    for entry in os.scandir(argpath):
        # 用os.path.join拼接路径,避免手动加斜杠的兼容性问题
        path = os.path.join(argpath, entry.name)
        if entry.is_dir():
            # 如果是目录,递归调用自身计算子目录的总大小
            sumsize += recls_rtsize(path)
        else:
            # 如果是文件,直接累加文件大小
            sumsize += os.path.getsize(path)
    return sumsize

print("total:", recls_rtsize('/var/log'))
非递归转递归的通用思路
  • 识别递归结构:找到问题中可重复的子问题。比如计算目录总大小的场景,每个子目录的总大小计算逻辑和根目录完全一致,这就是天然的递归子问题。
  • 明确基线条件:确定递归的终止节点。这里的基线是当处理的条目是文件时,直接返回文件大小(无需再递归);如果是空目录,循环不会执行,直接返回0,这也是一种隐性的终止条件。
  • 重构逻辑为递归调用:把原循环中处理子问题的代码,替换成对自身函数的调用。原代码缺失目录处理逻辑,现在换成递归调用函数来获取子目录的总大小,补全了原本的逻辑漏洞。
  • 替换迭代累加为递归累加:原函数靠循环逐个累加文件大小,现在对于每个目录条目,要么直接加文件大小,要么加递归调用返回的子目录总大小,本质是把迭代的线性累加转化为递归的分层累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:50:24