停止递归算法
stopping a recursive algorithm
本文关键字:递归算法 更新时间:2023-10-16
有10个数字必须满足以下等式:
(a[0]+a[1]+a[3]+a[4]) =S
([9] + [0] + [7] + [8]) = S
([2] + [1] + [9] + [8]) = S
(a[2]+a[3]+a[5]+a[6]) =S
([8] + [7] + [5] + [4]) = S
我有一个数组中的10个数字,通过使用递归排列算法,我试图找到所有可能的排列来检查这些数字是否满足上述方程。一旦找到正确的排列,我希望程序返回true并停止生成其他排列。下面是代码,但它总是返回false。例如,对于数字1、2、3、4、5、6、8、9、10、12和S=24,我们有一个答案:1、8、2、12、3、6、4、10、5、9但算法返回false无论如何!!
bool permute(int *array,int i,int length, int S) {
if (length == i){
if( check( array, S) )
return true;
else
return false;
}
int j = i;
for (j = i; j < length; j++) {
swap(array+i,array+j);
if( check( array, S) )
return true;
permute(array,i+1,length, S);
swap(array+i,array+j);
if( check( array, S) )
return true;
}
return false;
}
bool check( int* a, int S){
if((a[0]+a[1]+a[3]+a[4]) ==S && (a[9]+a[0]+a[7]+a[8]) ==S && (a[2]+a[1]+a[9]+a[8]) ==S && (a[2]+a[3]+a[5]+a[6]) ==S && (a[8]+a[7]+a[5]+a[4]) ==S)
return true;
return false;
}
您必须处理返回状态。permute(array,i+1,length, S);
返回一个状态-检查它是否为真,在这种情况下返回:if(permute(array,i+1,length, S)) return true;
.
相关文章:
- 需要为 C++ 中的以下问题设计递归算法
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 运行合并排序递归算法时EXC_BAD_ACCESS错误
- 如何改进搜索二项式系数的递归算法
- 如何转换多次调用自己的递归算法?
- 如何将字符串保存在最长的常见子序列递归算法中
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 指针似乎迷失在递归算法中
- 如何从递归算法返回节点
- 从递归算法到迭代算法
- 可传递值影响递归算法的渐近时间复杂性
- 我的递归算法中的问题,用于查找所有最短、唯一的路径
- 带有两个递归调用的递归算法的时间复杂性
- 这种递归算法有什么问题?
- C++递归算法中抛出异常
- 将条件递归算法转换为迭代算法
- 递归算法中的分段错误
- printbinary递归算法
- 迭代等价于递归算法
- O(n^m) 复杂度的递归算法