需要使用递归和无循环功能来打印二进制数字的所有组合。
void printBinary(int n)
{
if(n==1)
{
cout << "0" << endl;
cout << "1" << endl;
}
else
{
// How do I call?
}
}
printBinary(3)
的示例输出:
000
001
010
011
100
101
110
111
答案 0 :(得分:3)
递归问题是您没有保存答案
这部分会给您带来困难:
if(n==1)
{
cout << "0" << endl;
cout << "1" << endl;
}
从那部分开始,我认为您想“在递归的每个状态下,打印对应的数字,然后在第n次递归后打印最后一个数字”
如果您认为“递归的每种状态,确定数字值然后将其传递到其他状态,然后在第n次递归后打印传递的值,则将更容易”
这就是我在C ++中实现它的方式:
void bin(int n, string answer){
if(n==0){
cout << answer << endl;
}else{
bin(n-1, answer+"0");
bin(n-1, answer+"1");
}
}
,当您将其命名为bin(3,"")
时,它将为您提供:
000
001
010
011
100
101
110
111
答案 1 :(得分:1)
随着位数的增加,答案总数增加了2倍,因此您将不得不两次调用一个函数
vector <string> getall(string k,int req){
if(k.length()==req) return {k};
vector <string> C;
vector <string> D;
k.push_back('0');
D = getall(k,req);
if(D.size()>0) C.insert(C.end(),D.begin(),D.end());
k.pop_back();
k.push_back('1');
D = getall(k,req);
if(D.size()>0) C.insert(C.end(),D.begin(),D.end());
k.pop_back();
return C;
}
因此,只需使用一个空字符串调用此函数,并将req作为要打印的位数,它将以升序打印,因为我们首先选择0,否则如果我们先选择1降序,则将打印。
string k = "";
int req = 5;
vector <string> s = getall(k,req);
如果您只想打印而不是返回第一行,可以在那儿打印。
答案 2 :(得分:1)
这是c版本
void bin(int n, char *answer,int size){
if(n==0){
printf("%s\n", answer);
}else{
memcpy(&answer[size-n],"0",1);
bin(n-1, answer,size);
memcpy(&answer[size-n],"1",1);
bin(n-1, answer,size);
}
}