我是社区新手。我想问一个关于我的代码的问题。我想从我的函数std::vector
返回dec2Bin
。
在main中,当我调用这个函数时,我只在vector中得到一个值。我不知道它有什么问题,请有人帮助我。这是我的代码
vector<int> dec2Bin(int n){
vector<int> v;
if (n == 0){
v.push_back(0);
return v;
}
else if (n == 1){
v.push_back(1);
return v;
}
else{
v.push_back(n%2);
return dec2Bin(n/2);
}
}
答案 0 :(得分:2)
你的else
案例会改变v
但忽略它,只返回它从递归调用中获得的内容,所以实际行为是在除以2后重复递归,最终转移到{{ 1}}或n == 0
case,产生大小n == 1
1
,然后将其返回调用堆栈,不再进行进一步修改。
如果您想要多个值,可以将vector
案例更改为:
else
答案 1 :(得分:1)
您没有将v
传递给函数的更深层递归,因此在每次递归时,它只会创建一个新的v
并返回它。您需要将其传递给将来的递归调用:
vector<int> dec2Bin(int n, vector<int>& v){
if (n == 0){
v.push_back(0);
return v;
}
else if (n == 1){
v.push_back(1);
return v;
}
else{
v.push_back(n%2);
return dec2Bin(n/2, v);
}
}
并可选择为默认调用约定创建重载:
vector<int> dec2Bin(int n){
vector<int> v;
dec2Bin(n, v);
return v;
}
或者,您可以让v
从更深的来电中接收构建的向量,如ShadowRanger's answer所做的那样。