for的递归
Recursion of for's
我花了很长时间试图弄清楚如何做到这一点,但它并没有按预期工作;我正在写一个有1到k个数字的代码,我需要找到所有可能的不重复的组合。例如,对于3∶1、2、3、12、13。
用1、2、3、4、5计数4位数的示例。
int k = 5;
for (int p = 0; p < k; p++)
{
for (int i = p+1; i < k; i++)
{
for (int j = i + 1; j < k; j++)
{
for (int h = j + 1; h < k; h++)
{
cout << p + 1 << i + 1 << j + 1 << h + 1 << endl;
}
}
}
}
还有一个3位数的例子,其中有1,2,3。
int k = 4
for (int p = 0; p < k; p++)
{
for (int i = p+1; i < k; i++)
{
for (int j = i + 1; j < k; j++)
{
cout << p + 1 << i + 1 << j + 1 << endl;
}
}
}
我认为要计算n位数的可能位置而不重复,我需要n。我不知道如何在没有递归的情况下做到这一点,递归在我做的时候是不起作用的。我的目标是获得递归,它将计算和打印n位数字的可能位置。
我自己做了递归来计算可能性,但我爱你们所有的帮助。
我的递归是
void col(int ilosc)
{
static int st;
for (int i = st++; i < k; i++)
{
if (ilosc > 1)
col(ilosc - 1);
else
sposob++;
}
}
其中ilosc是数字,sposob是可能位置数。
注意:sposob和k是全局变量。
我不确定递归是否是这里的最佳选择,但你可以这样做:
typedef std::vector<int> IV;
IV getFirst(int k){
IV res;
for (int i=0;i<k-1;i++){res.push_back(i+1);}
return res;
}
bool getNext(IV& numbers,int i){
if (i==-1){return false;} // end of recursion
if (numbers[i]>i+1){return getNext(numbers,i-1);}
numbers[i]++;
return true;
}
bool getNext(IV& numbers){ // start of recursion
return getNext(numbers,numbers.size()-1);
}
int main() {
IV numbers = getFirst(5);
for (int i=0;i<numbers.size();i++){std::cout << numbers[i];}
std::cout << std::endl;
while(getNext(numbers)){
for (int i=0;i<numbers.size();i++){std::cout << numbers[i];}
std::cout << std::endl;
}
}
我想这会让你非常接近。我偶尔会在这里重复一遍,但这应该会让你走上正确的道路。
const int max_depth = 5; // How long your string is
const int max_digit = 3; // Max digit you are counting to
int *nums = new int [max_depth];
void recurse_count(int depth)
{
if (depth < max_depth)
{
for(int i = depth; i <= depth+1; i++)
{
nums[depth] = i;
recurse_count(i+1);
}
}
else
{
for (int j = 0; j < max_depth; j++)
cout<<nums[j]+1;
cout<<endl;
}
}
int main()
{
recurse_count(0);
return 0;
}
我的方法(可能晚上还太早,我遇到了问题)
namespace detail
{
void recurse_hlp(int min, int max, std::vector<int> vals, std::function<void(const std::vector<int>&)> f, std::size_t ptr)
{
if (ptr == vals.size())
f(vals);
else
{
for (int i = min; i <= max; ++i)
{
vals[ptr] = i;
recurse_hlp(min, max, vals, f, ptr + 1);
}
}
}
}
void recurse(int min, int max, int count, std::function<void(const std::vector<int>&)> f)
{
std::vector<int> vals(count);
detail::recurse_hlp(min, max, vals, f, 0);
}
void print(const std::vector<int>& vals)
{
for (int v : vals)
std::cout << v << " ";
std::cout << std::endl;
}
int main()
{
recurse(0, 5, 3, &print);
}
recurse
得到一个接受std::vector<int>
的函数,该函数包含从min
到max
直到count
位的所有数字。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- C++ 使用递归而不是 for 循环
- 何时在此递归函数中发生for循环增量
- 在 c++ 中创建递归 for 语句
- 将三个嵌套的 for 循环包装成递归
- 使用 for 循环递归地乘以数组中的元素
- 哪个是有效的:递归函数或 for 循环
- 没有if或if相关语句(switch、while、for、?:等)的可视化c++递归
- for的递归
- 嵌套for循环递归
- 递归调用,而不是多个for循环调用
- 带有for循环的递归函数:返回值问题
- C++ |需要帮助从 for 循环函数转换 - >递归函数