gpt4 book ai didi

javascript - 如何在参数数量不断增加的电源循环中使用递归?

转载 作者:搜寻专家 更新时间:2023-11-01 05:19:17 26 4
gpt4 key购买 nike

这是一个典型的 Power Loop problem ,而我只需要一个简单而优雅(紧凑)的解决方案...我将展示带有嵌套 for 循环 的问题/解决方案示例。假设我需要将这段代码转换为递归:

console.log("bits","Binary")
for (let i=0; i<2; i++) {
show(i)
for (let j=0; j<2; j++) {
show(i,j)
for (let k=0; k<2; k++)
show(i,j,k) // ... l,m,n,o,p
} // j
} // i

function show(...args) {
let code = String( args.reduce( (ac,cur) => ''+ac+cur ) )
console.log( code.length, code )
}

这个 3 级样本的 14 行唯一输出是

bits Binary
1 '0'
2 '00'
3 '000'
3 '001'
2 '01'
3 '010'
3 '011'
1 '1'
2 '10'
3 '100'
3 '101'
2 '11'
3 '110'
3 '111'

丑陋的部分解决方案

我正在尝试使用引用来解决 this solution :

callManyTimes([2,2,2], show);

function callManyTimes(maxIndices, func) {
doCallManyTimes(maxIndices, func, [], 0);
}

function doCallManyTimes(maxIndices, func, args, index) {
if (maxIndices.length == 0) {
let x = args.slice(0); // cloning
while(x.length>0) {
func(x); // why send array[array]?
x.shift();
}
} else {
var rest = maxIndices.slice(1);
for (args[index] = 0; args[index] < maxIndices[0]; ++args[index]) {
doCallManyTimes(rest, func, args, index + 1);
}
}
}

function show(...args) {
if (typeof args[0] == 'object') args=args[0] // workaround... can optimize?
let code = String( args.reduce( (ac,cur) => ''+ac+cur ) )
console.log( code.length, code )
}

输出有重复的行,但有一部分行是解决方案...所以,看起来很近,但很丑(没有优雅地使用循环堆栈等)

3 '000'
2 '00'
1 '0'
3 '001'
2 '01'
1 '1'
3 '010'
2 '10'
1 '0'
3 '011'
2 '11'
1 '1'
...

最佳答案

您可以采用一个函数,该函数为生成的值采用一个临时数组。

function show(...args) {
let code = args.join('');
console.log(code.length, code);
}

function callManyTimes(max, cb, items = []) {
var i, temp;
if (items.length === max.length) return;
for (i = 0; i < max[items.length]; i++) {
temp = items.concat(i);
cb(...temp);
callManyTimes(max, cb, temp);
}
}

callManyTimes([2, 2, 2], show);

关于javascript - 如何在参数数量不断增加的电源循环中使用递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com