用一篇文章告诉你们,使用递归编写在Java中创建路径的方法
今天爱站技术小编用一篇文章告诉你们,使用递归编写在Java中创建路径的方法,小编觉得这篇文章实用性还是蛮高的,大家有兴趣的都可以选择收藏和做做笔记。
问题描述
我编写了一个名为“ createPath”的方法,该方法将整数和字符串作为参数。它应该像这样工作:
createPath(0,"a.txt") //prints out "a.txt"
createPath(1,"a.txt") //prints out "folder1/a.txt"
createPath(2,"a.txt") //prints out "folder1/folder2/a.txt"
createPath(3,"a.txt") //prints out "folder1/folder2/folder3/a.txt"
依此类推...此方法使用递归,因此没有for / for / for / while循环。这是我的代码:
public static void recursion(int n, String s) {
if (n == 0) {
System.out.print(s);
} else if (n==1){
System .out.print("folder1/" + s);
} else {
if(n>2) {
recursion(n-1,s);
System.out.print("folder" + n + "/");
} else {
System.out.print("folder1/folder2/");
}
System.out.print(s);
}
}
//expected output: folder1/folder2/folder3/folder4/folder5/a.txt
//actual output: folder1/folder2/a.txtfolder3/a.txtfolder4/a.txtfolder5/a.txt
我的问题是,我在输出末尾仅打印一次给定的字符串失败。如何修改代码,以便获得预期的输出?
思路一:
您不需要那么多if-else。
public static void recursion(int n, String s) { if (n == 0) { System.out.print(s); } else { recursion(n - 1, "folder" + n + "/" + s); } }
思路二:
尝试以下代码:
static String rec(int limit, String fileName, StringBuilder stringBuilder) { if (limit == 0) return stringBuilder.append(fileName).toString(); else { int newLimit = limit - 1; return rec(newLimit, fileName, stringBuilder.append("folder" + limit + "/")); } }
调用上述方法:
rec(10, "a.txt", new StringBuilder())
输出:
folder10/folder9/folder8/folder7/folder6/folder5/folder4/folder3/folder2/folder1/a.txt
思路三:
您可以简单地实现以下目标:
public static void recursion(int n, String s, int start) { if (n == 0) { System.out.print(s); } else { System.out.print("folder" + start + "/"); recursion(n-1,s,start+1); } }
输入:
recursion(5, "a.txt", 1);
输出:
folder1/folder2/folder3/folder4/folder5/a.txt
以上内容就是爱站技术频道小编为大家分享的关于用一篇文章告诉你们,使用递归编写在Java中创建路径的方法,看完以上分享之后,大家应该都知道有什么方法了吧。