首页 > 其他 > 详细

通过递归遍历n位2进制数的所有情况

时间:2014-02-04 10:51:20      阅读:506      评论:0      收藏: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[n] = 0;
	fun(a,n+1);
	a[n] = 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

程序运行的示例图:

bubuko.com,布布扣

如果,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进制数的所有情况

原文:http://blog.csdn.net/qsyzb/article/details/18909171

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!