- 此问题在此处已有答案**:
(18个答案)
昨天关门了。
- 我一直在尝试重新创建此C程序的JavaScript版本。**
程序假设从数组集中的字符生成所有可能的组合。基本上有两个函数printAllKeyLength
和printAllKeyLengthR
。每次调用第二个函数时,它检查k变量,当k等于0时打印结果,其中的for循环遍历字符集的长度,并将每个字符添加到变量前缀和变量新前缀。之后,它会反复调用自己,直到它的每个变量都导致它的k变量等于零。C程序工作正常,但JavaScript只在最后几次调用函数时完成,这导致结果不完整。之前的其余调用被省略。我尝试将JavaScript函数更改为异步函数,但没有成功。有人能解释为什么会发生这种情况,以及如何在不完全改变程序的功能和结构的情况下修复它吗?
[C语言]---此版本可以正常工作,但JavaScript版本无法正常工作{见下文}
#include <stdio.h>
#include <string.h>
int c = 0, chct;
char subs[10];
char set0[27] = "";
void
printallkeylengR(char set[], char prefix[], int n, int k)
{
if (k == 0) {
printf("%s\n", prefix);
}
else {
for (int i = 0; i < n; i++) {
char newprefix[10] = "";
char tmp[2] = "";
tmp[0] = set[i];
strcpy(subs, prefix);
strcat(prefix, tmp);
strcpy(newprefix, prefix);
strcpy(prefix, subs);
printallkeylengR(set, newprefix, n, k - 1);
}
}
}
void
printallkeyleng(char set[], int k, int n)
{
char ch[1] = "";
printallkeylengR(set, ch, n, k);
}
int
main()
{
chct = 0;
for (int i = 65; i <= 90; i++) {
set0[chct] = i;
chct += 1;
}
set0[27] = '\0';
printallkeyleng(set0, 4, strlen(set0));
return 0;
}
[Javascript]---不迭代所有结果!!!
function printAllKeyLengthR(set,prefix,n,k){
if(k==0){
document.body.appendChild(document.createTextNode(prefix+" "));
}
else{
console.log("Prefix "+prefix+" K= "+k)
for(i=0;i<n;i++){
newprefix=prefix.toString()+set[i].toString();
console.log("New Prefix "+newprefix+" K= "+k+" i= "+i);console.log(" ");
const x = printAllKeyLengthR(set,newprefix,n,k-1)
}
}
}
function printAllKeyLength(set,k,n){
printAllKeyLengthR(set,"",n,k);
}
set=["0","1","2","3","4","5","6","7","8","9"];
//printAllKeyLength(set ,final_length,no_of_elem)
printAllKeyLength(set,4,10)
1条答案
按热度按时间sh7euo9m1#
JavaScript实现的问题在于for循环在进入下一次迭代之前没有等待递归调用完成,因此下一次迭代可能在上一次迭代完成之前就开始了,从而导致结果不完整。