将多个循环转换为一个递归
Turning several loops into one recursion
我有这段代码:
for (int i=0; i<N; i++)
{
int j;
if (i%2==1) j=1;
else j=0;
for (; j<N; j+=2)
{
for(int k=0; k<N; k++)
{
int n;
if (k%2==1) n=1;
else n=0;
for (; n<N; n+=2)
{
for (int l=0; l<N; l++)
{
int o;
if (l%2==1) o=1;
else o=0;
for (; o<N; o+=2)
{
for(int m=0; m<N; m++)
{
int p;
if (m%2==1) p=1;
else p=0;
for (; p<N; p+=2)
{
if (check_full(lenta,i,j,k,n,l,o,m,p))
{
count++;
cout<<"Lenta uzsipilde: ("<<i<<","<<j<<"), "<<"("<<k<<","<<n<<"), "<<"("<<l<<","<<o<<"), "<<"("<<m<<","<<p<<"), "<<endl;
}
}
}
}
}
}
}
}
}
有什么办法可以把它变成递归吗?基本上,这些循环可以找到给定问题的所有可能坐标。如果它可以转换为一个小递归,我是否需要使用数组而不是 8 个变量?
这是我尝试做的,但它不起作用:
void findBishops(){
for (int i=0; i<N; i++){
int j;
if (i%2==1) j=1;
for (; j<N; j+=2){
putIntoArray(array, i, j);
if (isFull(board, array)){
PrintAnswer(array);
}else{
arrayCount = arrayCount-2;
findBishops();
}
}
}
}
void putIntoArray(array[], i, j){
array[arrayCount++] = i;
array[arrayCount++] = j;
}
我可能会递归主教而不是在棋盘上循环:
首先放置一个主教,然后递归放置第二个主教,依此类推,直到你到达最后一个。
回溯发生在你从递归返回时,那就是你尝试下一个替代方案的时候,对于一个主教,然后再次递归。
直到你用完了选择——这就是你完成的时候。
这是一个粗略的轮廓:
place_bishop(this_bishop)
if this_bishop is the final bishop:
for every possible position of this_bishop:
see if it's a solution and handle that
else:
for every possible position of this_bishop:
place_bishop(next_bishop)
位置选择需要一些思考,以免多次找到相同的解决方案。
相关文章:
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 我在 C++ 中创建了一个函数来递归反转字符串,但是之后如何使功能打印一个 endl?
- 使用带有一个参数函数的递归找到数字的平方
- C++:递归地将字符串中一个字母的所有实例替换为另一个字母
- 为什么这个递归函数会创建一个无限循环?
- 使用递归计算一个函数中的高度和大小
- 在int main()[c++]中实现一个递归函数
- C++[递归]将一个数字写成2的升序之和
- 如何编写一个递归函数,以随机的方式混淆从0到6的数字
- 如何创建一个递归函数来显示有多少元音具有输入
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 一个递归函数,用于计算 n-airy 树的高度
- 将多个循环转换为一个递归
- 如何创建一个递归方法来比较两个值
- 编写一个递归函数来乘以2个整数
- Fencepost问题:我需要一个递归函数,当它第一次被调用时,它会跳过执行一个部分
- 在C++中做了一个递归函数。现在要求创建一个"tail-recursion"函数
- 我正试图用c++编写一个递归函数,但它一直导致堆栈溢出
- 我想要一个递归函数来检查使用二进制搜索数组的顺序
- 编写一个递归C++函数,计算并返回数组中整数的乘积