Algorithm 递归生成长度为n的所有二进制字符串的最佳方法是什么? >我在寻找一个好的(易于实现、直观等)强>递归递归//>方法,生成长度为 n>代码>的所有二进制字符串,其中代码< 1 > p>这里是C++中递归的例子。p> 矢量答案; void getStrings(字符串s,int-digitsLeft) { if(digitsLeft==0)//字符串的长度为n 回答:向后推; 其他的 { getStrings(s+“0”,digitsLeft-1); getStrings(s+“1”,digitsLeft-1); } } getStrings(“,n);//初始呼叫

Algorithm 递归生成长度为n的所有二进制字符串的最佳方法是什么? >我在寻找一个好的(易于实现、直观等)强>递归递归//>方法,生成长度为 n>代码>的所有二进制字符串,其中代码< 1 > p>这里是C++中递归的例子。p> 矢量答案; void getStrings(字符串s,int-digitsLeft) { if(digitsLeft==0)//字符串的长度为n 回答:向后推; 其他的 { getStrings(s+“0”,digitsLeft-1); getStrings(s+“1”,digitsLeft-1); } } getStrings(“,n);//初始呼叫,algorithm,recursion,language-agnostic,binary,Algorithm,Recursion,Language Agnostic,Binary,根据Divide et Impera范例,生成长度为n的所有二进制字符串的问题可以分为两个子问题:打印长度为n-1的所有二进制字符串以0开头的问题和打印长度为n-1的所有二进制字符串以1开头的问题。下面的伪代码解决了这个问题: generateBinary(length, string) if(length > 0) generateBinary(length-1, string + "0") generateBinary(length-1, string + "1")

根据Divide et Impera范例,生成长度为n的所有二进制字符串的问题可以分为两个子问题:打印长度为n-1的所有二进制字符串以0开头的问题和打印长度为n-1的所有二进制字符串以1开头的问题。下面的伪代码解决了这个问题:

generateBinary(length, string)

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

你的问题可以用一个算法来解决

这种算法的伪代码是:

fun(input, n) 
    if( base_case(input, n) ) 
        //print result
    else
        //choose from pool of choices
        //explorer the rest of choices from what's left
        //unchoose
实施:

  • 基本情况:当结果字符串的大小等于n
  • 递归情况:
    • 我们的选择库包括01
    • 在这种情况下选择意味着取0或1,并将其作为最后一个字符添加到输入中
    • 通过递归进行探索,在这里我们从choose步骤传递新的输入值,直到达到基本情况
    • 在这种情况下取消选择意味着删除最后一个字符
函数二进制(n){
二进制助手('',n);
}
函数binaryHelper(str,n){
如果(str.length==n){
//基本情况
console.log(str);//打印字符串
}否则{
for(设位=0;位<2;位++){
str=str+bit;//选择
binaryHelper(str,n);//探索
str=str.slice(0,-1);//取消选择
}
}
}
log('Size 2二进制字符串:');
二进制(2);
log('Size 3二进制字符串:');

二进制(3)祝n=100好运:)对于n=100,这将是1267650600228229401496703205376个不同的字符串-在我的一生中不会发生。感谢您提供此代码片段,它可能会提供一些有限的、即时的帮助。一个恰当的解释将通过说明为什么这是一个很好的问题解决方案而大大提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设。
fun(input, n) 
    if( base_case(input, n) ) 
        //print result
    else
        //choose from pool of choices
        //explorer the rest of choices from what's left
        //unchoose