2016-06-12 3 views
-9

Это мой код, который генерирует любые возможные перестановки в заданной длины (п) из строки s (АЗБУКА):Как преобразовать цикл for в рекурсивный алгоритм?

public String binary(int n, String str, int i) { 
    String s = "abcdefghijklmnopqrstuvwxyz"; 
    //i=s.length(); 
    if (n == 0) { 
     System.out.println(str); 
     return str; 
    } 
    if (i == s.length()) { 
     System.out.println(str); 
     return ""; 
    } 

    for (i = 0; i < 26; i++) { 
     binary(n - 1, str + s.charAt(i), i); 
    } 

    return ""; 
} 

Мой вопрос: как я могу конвертировать мой for цикл в рекурсивный алгоритм? Мне не разрешено использовать какие-либо петли в этой домашней задаче.

+0

Вы должны использовать цикл. –

+0

Неправда, есть способ. – Efi

+0

Хорошо, что это? –

ответ

3

Вы делаете это фактически используя параметр i.

private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; 
public static void binary(int n, String str, int i) { 
    if (i == ALPHABET.length()) 
     return; 
    if (n == 0) { 
     System.out.println(str); 
     return; 
    } 
    binary(n - 1, str + ALPHABET.charAt(i), 0); // next letter starts at beginning of alphabet 
    binary(n, str, i + 1); // do it again using next letter of alphabet 
} 

TEST

binary(2, "", 0); 

ВЫВОД

aa 
ab 
ac 
... 
az 
ba 
bb 
... 
zy 
zz 
+0

Он работает! Благодарю. – Efi

Смежные вопросы