我正在嘗試使用遞回查找陣列 [1,2,3] 的排列。如果我直接列印出基本情況中的排列,一切都會正常作業,但我想將所有排列存盤在一個單獨的陣列中。我通過將陣列推入矩陣來做到這一點,但它顯示了錯誤的輸出,即所有被推入的陣列都是相同的。我無法找出錯誤是什么。請幫忙。
let arr = [1, 2, 3];
let matrix = [];
let index = 0;
function perm(arr, index) {
if (index === arr.length) {
console.log('arr:', arr);
matrix.push(arr);
return;
}
for (let i = index; i < arr.length; i ) {
[arr[i], arr[index]] = [arr[index], arr[i]];
perm(arr, index 1);
[arr[i], arr[index]] = [arr[index], arr[i]];
}
}
perm(arr, index);
console.log(matrix);
這是我得到的輸出:
arr: [ 1, 2, 3 ]
arr: [ 1, 3, 2 ]
arr: [ 2, 1, 3 ]
arr: [ 2, 3, 1 ]
arr: [ 3, 2, 1 ]
arr: [ 3, 1, 2 ]
[
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ]
]
uj5u.com熱心網友回復:
您將同一個陣列arr多次推入matrix,因此當您稍后更新它時,它會更新所有 ligne ,matrix因為它們是對同一個陣列的相同參考。
嘗試在arr之前復制陣列:
matrix.push(arr.slice());
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424386.html
標籤:javascript 数组 递归
