返回变量变量(Java)

返回变量变量(Java)

问题描述:

我得到了下面的代码,它的功能如下:你调用该方法并给它一个数字。它会打印出你输入的数字的所有排列组合。返回变量变量(Java)

例如:调用等方法:

置换(3)

它将打印出:

123,132,213,231,312, 321,

这里是代码:

public static void main(String[] args) { 
    permutations(3); 
} 

public static void permutations(int n) { 
    boolean used[] = new boolean[n]; //all set to false by default 
    int perm[] = new int[n]; 
    permutations2(used, 0, perm); 
} 

private static void permutations2(boolean used[], int index, int perm[]) { 
    if (index == used.length) { 
     for (int i = 0; i < perm.length; i++) { 
      System.out.print(perm[i] + ""); 
     } 
     System.out.print(", "); 
     return; 
    } 

    for (int i = 0; i < used.length; i++) { 
     if (!used[i]) { 
      used[i] = true; 
      perm[index] = i + 1; 
      permutations2(used, index + 1, perm); 
      used[i] = false; 
     } 
    } 

} 

我的问题是在返回声明。当由于某种原因调用返回值时,变量'index'会改变。有谁能向我解释为什么会发生这种情况?代码工作正常,我只是无法理解如何。

对不起,对英文不好。

+1

这是一个递归算法,因此'index'的新值被作为参数压入堆栈,但对于调用者来说,值保持不变。提示:在您的IDE中,在进行递归调用之前设置一个断点,并查看函数如何变得更深,然后返回。 –

+1

它不会改变。如果你可以确切地指明它是什么让你认为它确实如此,我们可以解释。请记住,您多次调用相同的函数,堆叠在一起,并且每个都获得自己的变量副本。 – chrylis

+0

'索引'的值不会改变,只要您没有为其指定一个新的值就不会改变! – BaSsGaz

permutations2是一个递归函数,你递归调用它的索引+ 1

当达到递归的基本情形,即指数== used.length,回叫和代码放在一个递归调用回到索引是一个更小的时候。