通过递归遍历n位2进制数的所有情况
2014-02-03 13:51
405 查看
题目要求:
输入一个正整数m,输出m位2进制的所有取值情况,从小到大输出,每个输出结果用换行符分割。
解题思路:
通过递归调用,从第1个到第m个数组元素分别置0和置1,然后当从1到m所有的元素都置0或者置1之后,进行输出。
程序代码:
当m=3的时候,输出结果为:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
程序运行的示例图:
如果,m不是一个由用户输入的值,而是一个固定的值,还可以使用m层循环来实现该程序:
#include<iostream>
using namespace std;
int main()
{
int m=3;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
for(int k=0;k<2;k++)
{
cout<<i<<" "<<j<<" "<<k<<endl;
}
}
}
return 0;
}
但是很明显,该程序不但具有局限性,还比较复杂,不如递归的方法。
输入一个正整数m,输出m位2进制的所有取值情况,从小到大输出,每个输出结果用换行符分割。
解题思路:
通过递归调用,从第1个到第m个数组元素分别置0和置1,然后当从1到m所有的元素都置0或者置1之后,进行输出。
程序代码:
#include<iostream> using namespace std; int m = 0; void fun(int *a,int n) { if(n>=m) { for(int i=0;i<n;i++) { cout<<a[i]<<" "; } cout<<endl; return; } a = 0; fun(a,n+1); a = 1; fun(a,n+1); } int main() { cin>>m; int * a = new int [m]; fun(a,0); return 0; }
当m=3的时候,输出结果为:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
程序运行的示例图:
如果,m不是一个由用户输入的值,而是一个固定的值,还可以使用m层循环来实现该程序:
#include<iostream>
using namespace std;
int main()
{
int m=3;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
for(int k=0;k<2;k++)
{
cout<<i<<" "<<j<<" "<<k<<endl;
}
}
}
return 0;
}
但是很明显,该程序不但具有局限性,还比较复杂,不如递归的方法。
相关文章推荐
- 通过递归遍历n位2进制数的所有情况
- Python通过递归遍历出集合中所有元素的方法
- Python通过递归遍历出集合中所有元素的方法
- 通过递归遍历出集合中的所有元素
- (修改递归错误)PHP 在无限级分类情况下,通过接口取出所有分类之后生成分类树
- 通过os.path.walk方法递归遍历目录中所有文档
- pinyin4j把中文句子(含有多音字字母)转成拼音(二维数组递归求所有组合情况返回list)算法实现!
- 1.0使用递归操作遍历文件夹下的所有文件
- //利用 DirectoryInfo递归遍历文件夹,删除所有文件,文件夹
- MSSQL 递归CTE的应用通过子级获取所有对应的父级及其本身(二)
- Python Tricks(九)—— 递归遍历目录下所有文件
- 递归遍历指定目录下所有指定的文件并删除
- MFC递归遍历目录下所有子目录和文件
- 通过二叉树的遍历理解递归
- Java递归遍历XML所有元素
- dom4j递归遍历XML的所有元素
- 递归遍历winForm 上所有控件
- python - 自定义一个递归函数用于递归遍历指定目录下的所有文件
- javascript递归遍历所有DOM文档节点
- 递归遍历页面中的所有控件并为其赋值