0
我得到了下面的代碼,它的功能如下:你調用該方法並給它一個數字。它會打印出你輸入的數字的所有排列組合。返回變量變量(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'會改變。有誰能向我解釋爲什麼會發生這種情況?代碼工作正常,我只是無法理解如何。
對不起,對英文不好。
這是一個遞歸算法,因此'index'的新值被作爲參數壓入堆棧,但對於調用者來說,值保持不變。提示:在您的IDE中,在進行遞歸調用之前設置一個斷點,並查看函數如何變得更深,然後返回。 –
它不會改變。如果你可以確切地指明它是什麼讓你認爲它確實如此,我們可以解釋。請記住,您多次調用相同的函數,堆疊在一起,並且每個都獲得自己的變量副本。 – chrylis
'索引'的值不會改變,只要您沒有爲其指定一個新的值就不會改變! – BaSsGaz