您的位置:首页 > 编程语言 > C语言/C++

递归实现布尔(boolean)真值表全排列--C语言版

2013-10-24 17:07 302 查看
问题描述:

假设有n个布尔变量x1,.....xn,试输出其所有可能的真值组合。  比如,当n=2时,有<true,false>,<true,true>,<false,true>,<false,false>.

 分析:

n个布尔变量的全排列,可以理解为第n个变量和前n-1个变量的全排列结果的组合, 即f(n)的全排列为 <true,f(n-1)>和<false,f(n-1)>。可以看出,只要解决了n-1个变量的全排列问题,就可以知道n个变量的全排列情况了。显然这个问题需要用到递归解决。 下面给出源码。

/*************************************
boolean布尔真值表的全排列问题解决
*************************************/
#include  "stdio.h"
#include  "math.h"
#include  "stdlib.h"
#define MAX_SIZE 101

void booleanSort(int x,int len, char* array[]);
void main(void)
{
int i,len;
char* array[MAX_SIZE]; /*定义一个字符串数组*/
printf("input the length of array:\n");
scanf("%d", &len);
if(len<0 || len>MAX_SIZE)
{
printf("error\n");
exit(1);
}
booleanSort(0,len,array);
getch();
}
/***********************************************
函数名称:booleanSort
参数列表:int x ------- 递归起始值
int len------ 数组长度
char* array-- 字符串数组
描    述:递归实现真值数组全排列
***********************************************/
void booleanSort(int x,int len, char* array[])
{
int i;

if(x ==len)
{
for(i=0; i< len; i++)
{
printf("%s ",array[i]);
}
printf("\n");
return;
}
else
{
array[x]="TRUE ";
booleanSort(x+1,len,array);   /*TRUE和前n-1个布尔全排列的组合*/
array[x]="FALSE";
booleanSort(x+1,len,array);   /*FALSE 和前n-1个布尔全排列的组合*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 递归 布尔真值表