【发布时间】:2015-08-12 10:13:14
【问题描述】:
我需要使用 java API 在z3 中定义一个函数,该函数将目录作为输入并递归删除其所有内容。由于z3不支持递归函数,有没有办法表达这样的函数?
【问题讨论】:
-
您可以使用堆栈并模拟递归。
我需要使用 java API 在z3 中定义一个函数,该函数将目录作为输入并递归删除其所有内容。由于z3不支持递归函数,有没有办法表达这样的函数?
【问题讨论】:
当您想将递归转换为迭代时,您需要跟踪堆栈中方法的状态。在这种特殊情况下,状态是一个文件。所以,方法是这样的:
private void walkTreeUsingSimulation(Stack<File> stack) {
while (!stack.isEmpty()) {
File f = stack.pop();
System.out.println(f.getAbsolutePath());
if(f.isDirectory()) {
File[] files = f.listFiles();
for (File file : files) {
stack.push(file);
}
}
}
}
您通过推送初始文件夹来创建堆栈。在这种情况下,我只是打印文件的路径。但是,为了能够删除文件,您需要先遍历叶节点。最简单的可能是将整个收集到一个列表中并使用该列表来删除文件。
【讨论】: