如何将for循环转换为递归算法?

时间:2016-06-12 13:12:23

标签: java loops recursion

这是我的代码,它从字符串s(abc)生成给定长度(n)中的任何可能的排列:

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循环转换为递归算法?我不允许在这个家庭作业中使用任何循环。

1 个答案:

答案 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