游戲中的閑置英雄,妖鈴可以1、2、3、4級。4 級由 4 級 1 組成,3 級由 3 級 1 組成,依此類推。
我想找到給定數字的所有 db 排列。我在javascript中制作了這個遞回演算法:
使用更簡化的方法更接近:
function findDB(numDB, arr) {
console.log("findDB" numDB);
if (numDB == 1) {
console.log("HERE2");
return 1;
} else {
for (let i = 1; i < numDB; i ) {
console.log("FOR" i);
console.log("COND" (numDB (numDB-i)));
if((numDB (numDB-i)) > numDB 1)
continue;
arr= arr.concat([numDB,[i,findDB(numDB - i, arr)]]);
}
return arr;
}
}
var final = []
var y = findDB(3, final);
console.log(JSON.stringify(y));
輸出:
findDB(2) 正確!
findDB2
FOR1
COND3
findDB1
HERE2
[2,[1,1]]
FindDB(3) 缺少 1,1,1,
findDB3
FOR1
COND5
FOR2
COND4
findDB1
HERE2
[3,[2,1]]
這是輸入 1 到 6 的預期輸出(演算法需要針對任何數字輸入進行縮放)
/1/ (1)
/2/ (2),
(1,1)
/3/ (3),
(2,1),
(1,1,1)
/4/ (4),
(3,1),
(2,2),(2,1,1),
(1,1,1,1)
/5/ (4,1),
(3,2),(3,1,1),
(2,2,1),(2,1,1,1),
(1,1,1,1,1)
/6/ (4,2),(4,1,1),
(3,3),(3,2,1),(3,1,1,1),
(2,2,2),(2,2,1,1),(2,1,1,1,1)
(1,1,1,1,1,1)
uj5u.com熱心網友回復:
這是一個遞回函式,可以產生你想要的結果。它嘗試將輸入 ( numDB) 分解為最大數量 ( maxDB,默認為4) 的部分。它通過將數字從numDB下降到1添加并將遞回呼叫的所有可能結果添加到該數字來做到這一點,并注意到 的值maxDB必須更改為不超過第一個數字。
const findDB = function(numDB, maxDB = 4) {
if (numDB == 0) return [ [] ];
let result = [];
let thisDB = Math.min(numDB, maxDB);
for (let i = thisDB; i > 0; i--) {
findDB(numDB - i, Math.min(i, thisDB)).forEach(n => {
result.push([i].concat(n));
});
}
return result;
}
console.log(findDB(5))
.as-console-wrapper {
min-height: 100% !important;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/465365.html
標籤:javascript 递归 计算机科学
上一篇:如何使此路由引數起作用?
