返回变量变量(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'会改变。有谁能向我解释为什么会发生这种情况?代码工作正常,我只是无法理解如何。
对不起,对英文不好。
答
permutations2是一个递归函数,你递归调用它的索引+ 1
当达到递归的基本情形,即指数== used.length,回叫和代码放在一个递归调用回到索引是一个更小的时候。
这是一个递归算法,因此'index'的新值被作为参数压入堆栈,但对于调用者来说,值保持不变。提示:在您的IDE中,在进行递归调用之前设置一个断点,并查看函数如何变得更深,然后返回。 –
它不会改变。如果你可以确切地指明它是什么让你认为它确实如此,我们可以解释。请记住,您多次调用相同的函数,堆叠在一起,并且每个都获得自己的变量副本。 – chrylis
'索引'的值不会改变,只要您没有为其指定一个新的值就不会改变! – BaSsGaz