Использование рекурсии для написания метода, который создает путь в Java - PullRequest
0 голосов
/ 25 февраля 2020

Я написал метод с именем "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"

и т. Д. .... Этот метод использует рекурсию, поэтому для / для каждого цикла / нет цикла. И это мой код:

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 

Моя проблема в том, что мне не удалось распечатать данную строку только один раз в конце вывода. Как изменить код, чтобы я мог получить ожидаемый результат?

Ответы [ 3 ]

2 голосов
/ 25 февраля 2020

Вам не нужно так много if-else.

public static void recursion(int n, String s) {
        if (n == 0) {
            System.out.print(s);
        } else {
            recursion(n - 1, "folder" + n + "/" + s);
        }
    }
0 голосов
/ 25 февраля 2020

Попробуйте следующий код:

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
0 голосов
/ 25 февраля 2020

Вы можете просто сделать следующее:

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
...