gpt4 book ai didi

javascript - 使用递归生成给定长度和基数的数字字符串

转载 作者:行者123 更新时间:2023-12-01 01:30:02 25 4
gpt4 key购买 nike

我一直在尝试调整下面的脚本以生成给定大小和基数的所有数字字符串。该函数似乎返回了错误的 str 值...有什么帮助吗?
(下面的脚本应该打印长度为 4 的所有二进制字符串,从 00001111)
(我在调用函数之前使用 str.replace 替换 str 的最后一位数字)

function generateStringsOfLength(size, base, str) {
if (str.length >= size) {
document.write(str + "<br>");
return;
}
//outer loop to change position value
for (let pos = 0; pos < size; pos++) {
//appending an empty char to the "str", this empty char will be replaced by "val" in each iteration of the below inner loop
str += " ";
//inner loop change only the lsb digit from "0" to "base-1"
for (let val = 0; val < base; val++) {
str = str.replace(/.$/, val);
generateStringsOfLength(size, base, str);
}
}
}
generateStringsOfLength(4, 2,"");

编辑:
实际上,我试图概括并实现以下二进制字符串的伪代码:

generateBinary(length, string)    
if(length > 0)
generateBinary(length-1, string + "0")
generateBinary(length-1, string + "1")
else
print(string)

我在代码中所做的唯一修改是使用循环来递归“基本”次调用函数...

最佳答案

主要问题是外循环使 str 更长。但它不应该在那里:字符串已经在递归调用中变得更长。应删除该外循环。

其次,使用正则表达式更改数字的方式效率不高。相反,只需使用参数传递与附加数字连接的字符串,而不更改当前上下文中 str 的值:

最后,不要使用document.write:这确实是不好的做法。而是使用console.log,或者更好的是,不要在函数本身中输出任何内容。最好让函数以字符串数组的形式返回结果,并让调用者决定如何处理它:

function generateStringsOfLength(size, base, str) {
if (str.length >= size) {
return [str]; // Don't output. Instead build an array with strings
}
const result = [];
for (let val = 0; val < base; val++) {
// Don't change str. Instead pass the modified value on-the-fly
// Collect the result in a growing array
result.push(...generateStringsOfLength(size, base, str + val));
}
return result; // Return the collected strings
}

const result = generateStringsOfLength(4, 2,"");
console.log(result);

我想你正在玩递归,因为结果更容易产生,如下所示:

function generateStringsOfLength(size, base, str) {
return Array.from({length: base ** size},
(_, i) => i.toString(base).padStart(size, '0'));
}

const result = generateStringsOfLength(4, 2,"");
console.log(result);

关于javascript - 使用递归生成给定长度和基数的数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53361335/

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