Algorithm 用递归函数求解
假设我有:Algorithm 用递归函数求解,algorithm,recursion,Algorithm,Recursion,假设我有: Class Folder{ int id; String name; Folder subFolder; } 假设我不知道有多少子文件夹,如何显示文件夹的层次结构。例如: FolderA包含FolderB(2级) FolderA包含FolderB,FolderB包含FolderC(3级) 我正在寻找使用递归函数的算法解决方案。 这是我的尝试: function displaySubFolders(Folder f){ print(f.name);
Class Folder{
int id;
String name;
Folder subFolder;
}
假设我不知道有多少子文件夹,如何显示文件夹的层次结构。例如:
function displaySubFolders(Folder f){
print(f.name);
if(f.subFolder is NULL) {return 0;}
else{
displaySubFolders(f.subFolder);
}
}
一个简单的递归解决方案:
public void printHierarchy(Folder f){
if(f == null) {
return;
}
f.display();
printHierarchy(f.subFolder);
}
一个简单的递归解决方案:
public void printHierarchy(Folder f){
if(f == null) {
return;
}
f.display();
printHierarchy(f.subFolder);
}
这个怎么样
function displaySubFolders(Folder f, string indent){
print(indent);
print(f.name);
if(f.subFolder is NULL) {return 0;}
else{
displaySubFolders(f.subFolder, indent+" ");
}
}
印刷品
FolderA
FolderB
FolderC
FolderD
如果A
包含B
和D
,B
包含C
你可以用“--”
、“**”
或任何你想要的东西来替换空格。这个怎么样
function displaySubFolders(Folder f, string indent){
print(indent);
print(f.name);
if(f.subFolder is NULL) {return 0;}
else{
displaySubFolders(f.subFolder, indent+" ");
}
}
印刷品
FolderA
FolderB
FolderC
FolderD
如果A
包含B
和D
,B
包含C
您可以用
“--”
、“**”
或您想要的任何内容替换空格。如果我正确解释了您的问题,您看到的似乎是一个链表,其中每个家长只有一个孩子。在这种情况下,完全避免递归可能会更有效(尽管以后很难扩展到多个子体。我认为递归更易于扩展)
这种方法的主要优点是,无论链表有多大,用于计算的内存量保持不变。然而,递归策略在递归时会消耗越来越多的堆栈空间。如果我正确地解释了您的问题,您看到的似乎是一个链表,其中每个父级只有一个子级。在这种情况下,完全避免递归可能会更有效(尽管以后很难扩展到多个子体。我认为递归更易于扩展)
这种方法的主要优点是,无论链表有多大,用于计算的内存量保持不变。然而,递归策略在递归时会消耗越来越多的堆栈空间。我不知道,如果您有子文件夹,您应该要求显示该子文件夹?我需要显示父文件夹名->文件夹名->文件夹名->文件夹名(父文件夹名->子文件夹名->子文件夹名)。不一定是三级层次结构,它可以是5级、6级或更多级。您从不迭代
f
的子级。你应该这样做,以找出所有的子文件夹。f只有一个子文件夹,这轮到了一个子文件夹。我不知道,如果你有一个子文件夹,也许你应该要求显示该子文件夹?我需要显示父文件夹名->文件夹名->文件夹名->文件夹名(父文件夹名->子文件夹名->大文件夹名)。不一定是三级层次结构,它可以是5级、6级或更多级。您从不迭代f
的子级。您应该这样做以查找所有子文件夹。f只有一个子文件夹,该子文件夹有一个子文件夹。除非问题缺少有关文件夹实际包含内容的非常重要的详细信息,否则这是特定问题的正确答案。除非您将拥有一个子文件夹数组,否则不需要迭代子文件夹,递归将不必要地扰乱调用堆栈。除非问题缺少关于文件夹实际包含内容的非常重要的细节,否则这是对特定问题的正确回答。除非要有一个子文件夹数组,否则不需要迭代子文件夹,递归将不必要地扰乱调用堆栈。