用Java编写递归函数以输出所有组合中的一组单词

用Java编写递归函数以输出所有组合中的一组单词,java,recursion,Java,Recursion,我想看看如何使用Java递归函数获得以下输出。如果能深入了解如何着手解决这样的问题,那就太好了。递归Java函数应该使用以下单词:“MIKE”、“AND”、“IKE”,并在单独的一行上输出每个顺序,如下面所示 MIKEANDIKE MIKEIKEAND IKEANDMIKE IKEMIKEAND ANDIKEMIKE ANDMIKEIKE publicstaticvoidmain(字符串[]args){ recur(新字符串[]{“MIKE”,“AND”,“IKE”},”,0); } 公共静态

我想看看如何使用Java递归函数获得以下输出。如果能深入了解如何着手解决这样的问题,那就太好了。递归Java函数应该使用以下单词:
“MIKE”、“AND”、“IKE”
,并在单独的一行上输出每个顺序,如下面所示

MIKEANDIKE
MIKEIKEAND
IKEANDMIKE
IKEMIKEAND
ANDIKEMIKE
ANDMIKEIKE
publicstaticvoidmain(字符串[]args){
recur(新字符串[]{“MIKE”,“AND”,“IKE”},”,0);
}
公共静态无效重现(字符串[]字,字符串结果,整数n){
if(n==单词长度){
系统输出打印项次(结果);
返回;
}
for(int i=0;i
要记住的主要一点是,您需要保留一个状态变量来决定在每个递归调用中打印的组合

例如,状态变量可以是3位数字,即123。然后将这些数字映射为单词,例如,1是“MIKE”,2是“And”,3是“IKE”。因此,如果使用123调用函数,那么您将打印“MIKEANDIKE”,然后使用123的下一个置换(132)再次调用,依此类推

我刚才提到了一种可能的状态变量变化。有无数种方法可以声明状态变量。你可以从中得到的主要想法是如何解决问题


希望这有帮助!如果你什么都不懂,请告诉我。快乐编码

您需要以某种方式标记您已经使用的值,在本例中,我使用null来实现此目的,但是还有其他方法(例如使用列表并删除/添加值,或者复制列表本身)

公共静态无效重现(字符串[]个字,字符串结果,int n){
if(n==单词长度){
系统输出打印项次(结果);
返回;
}
字符串温度;
for(int i=0;i
你能提供更多信息吗,你目前掌握的代码以及你发现问题的地方吗?@jpganz18我添加了我所拥有的,但它不起作用,这就是为什么如果有人知道如何进行递归,我会寻求帮助的原因。啊,现在,一旦我看到它起作用,这是有意义的。干得好
public static void main(String[] args) {
    recur(new String[]{"MIKE", "AND", "IKE"}, "", 0);
}

public static void recur(String[] words, String result, int n) {
    if (n == words.length) {
        System.out.println(result);
        return;
    }
    for (int i = 0; i < words.length; ++i) {
        String out = result + words[i];
        recur(words, out, n + 1);
    }
}
    public static void recur(String[] words, String result, int n) {
        if (n == words.length) {
            System.out.println(result);
            return;
        }
        String temp;
        for (int i = 0; i < words.length; ++i) {
            if (null != words[i]) {
                String out = result + words[i];
                temp = words[i];
                words[i] = null;
                recur(words, out, n + 1);
                words[i] = temp;
            }
        }
    }