vector<int> vec(unsigned int n) { vector<int> num; while (n != 0) { num.push_back(n%10); vec(n / 10); } return num; }
这是一个将输入int的用户解析为数字的函数 . 我正在对返回向量的函数进行递归调用 . 我检查直到数字的值变为零 . 但是当我运行它时,它进入了一个无限循环 .
可能是什么问题?
你基本上有2个循环,因为递归性和一个因为while .
递归调用是正确的,但你不应该把条件放入一段时间 . 有无限循环出现的地方 . 在你检查n为!= 0时,但是在那个体中没有修改n . 你应该有:
if (n != 0) { num.push.... vec(n/10); } return num;
在您的代码中,您没有在行vec(n / 10)处存储递归调用的值 . 如果你正在进行递归,则不需要放置while循环 . 你只需要做一个:递归或循环 .
以下是您可能想要尝试的代码:
Loop :
vector<int> vec(unsigned int n) { vector<int> ans; while(n!=0) { ans.push_back(n%10); n=n/10; } reverse(ans.begin(),ans.end()); return ans; }
在这里,您需要反转向量以获得正确的顺序(从左到右) .
或者您可以尝试 recursive 方式:
vector<int> vec1(unsigned int n) { vector<int> ans; if(n==0) return ans; ans.push_back(n%10); vector<int> tmp=vec1(n/10); ans.insert(ans.end(),tmp.begin(),tmp.end()); return ans; }
而且你还需要反转它,你的 vec 函数应该调用这个 vec1 函数:
vec
vec1
vector<int> vec(unsigned n) { vector<int> ans=vec1(n); reverse(ans.begin(),ans.end()); return ans; }
2 回答
你基本上有2个循环,因为递归性和一个因为while .
递归调用是正确的,但你不应该把条件放入一段时间 . 有无限循环出现的地方 . 在你检查n为!= 0时,但是在那个体中没有修改n . 你应该有:
在您的代码中,您没有在行vec(n / 10)处存储递归调用的值 . 如果你正在进行递归,则不需要放置while循环 . 你只需要做一个:递归或循环 .
以下是您可能想要尝试的代码:
Loop :
在这里,您需要反转向量以获得正确的顺序(从左到右) .
或者您可以尝试 recursive 方式:
而且你还需要反转它,你的
vec
函数应该调用这个vec1
函数: