【发布时间】:2019-08-30 23:45:05
【问题描述】:
我想编写一个在 2 个条件下退出的递归函数。
假设我想创建一个目录并要求用户输入。他可能会输入这样的内容:
Valid: /existing-dir1/existing-DIR2/non-existence-dir1/non-existence-dir2
Invalid: /existing-dir1/existing-FILE1/non-existence-dir1/non-existence-dir2
要遍历文件名,我有函数dirname(),它接受/foo/bar 并返回/foo。我还有函数exist() 来检查文件名是否存在,isdir() 来查看它是文件还是目录。
基本上,我需要从文件名的末尾递归循环,忽略不存在的节点,并检查是否有任何节点是文件——这是无效的。当两个条件之一发生时,递归结束,以先到者为准:
- 找到一个文件
-
dirname()返回/
我不熟悉递归,两个条件对我来说有点太多了。我正在使用 POSIX 脚本,但 C++/Java/C# 中的代码示例都很好。
编辑:我知道我可以执行mkdir -p 并获取其状态代码,但它会创建目录。尽管如此,为了学习的目的,我想以递归方式进行。
【问题讨论】:
-
为什么要从头循环?在我看来,如果你从头开始,如果任何前缀路径代表一个文件,你可以返回
invalid,如果你通过整个字符串而没有遇到文件,则返回valid。 -
@ScottSauyet 可能是因为预装了
dirname程序,适合从头循环。在 shell 脚本中,工具是有限的,甚至数组也不可用。从头开始循环可能会使代码更复杂一些。我更喜欢使用已有的。 -
我想递归从头到尾都是一样的。
标签: recursion