递归实现布尔(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个变量的全排列情况了。显然这个问题需要用到递归解决。 下面给出源码。
假设有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个布尔全排列的组合*/ } }
相关文章推荐
- Linux C函数参考手册(PDF版)
- C#实现打造气泡屏幕保护效果
- C/C++数据对齐详细解析
- C 语言基础教程(我的C之旅开始了)[三]
- C 语言基础教程(我的C之旅开始了)[七]
- C/C++ 宏详细解析
- 用C#生成不重复的随机数的代码
- 在c和c++中实现函数回调
- 浅析C/C++中被人误解的SIZEOF
- C 语言基础教程(我的C之旅开始了)[六]
- oracle 使用递归的性能提示测试对比
- JavaScript的递归之递归与循环示例介绍
- 全排列算法的非递归实现与递归实现的方法(C++)
- php递归列出所有文件和目录的代码
- java递归菜单树转换成pojo对象
- c/c++中变量的声明和定义深入解析
- 浅析c与c++中struct的区别
- 深入详解C编写Windows服务程序的五个步骤
- 深入理解C/C++混合编程