1、算法思路
真值组合是全排列问题,能用递归的思想解决,关键是怎么写出递归的程序
由全排列思想可知,n个bool变量可以转化为后i个bool固定的值和前n-i个bool变量的全排列,例如:第n个为真,前面n-1个bool变量的全排列。由此递推,如果能解决n-1个bool变量的全排列问题,那么就能解决n个bool变量的全排列问题。
由全排列思想可知,n个bool变量可以转化为后i个bool固定的值和前n-i个bool变量的全排列,例如:第n个为真,前面n-1个bool变量的全排列。由此递推,如果能解决n-1个bool变量的全排列问题,那么就能解决n个bool变量的全排列问题。
2、源代码
#include <iostream>
using namespace std;
void boolcombination(bool *bc,int sbegin,int send) //布尔真值组合
{
if(sbegin == send) //递归到递归出口
{
for(int i = 0; i < send; i++)
if(bc[i])
cout << "TRUE ";
else
cout << "FALSE ";
cout << endl;
}
else //两种情况,第一种第i个为真,然后进行递归,第二种第i个为假,然后进行递归
{
bc[sbegin] = !bc[sbegin]; //求反
boolcombination(bc,sbegin + 1,send);//递归求全排序
bc[sbegin] = !bc[sbegin]; //求反
boolcombination(bc,sbegin + 1,send);//递归求全排序
}
}
int main()
{
bool bc[100] = {true,false,true};
boolcombination(bc,0,3);
return 0;
}