您的位置:首页 > 其它

打印1到最大的n位数(递归实现)

2015-05-17 15:03 302 查看
上一篇博客是用循环实现的,代码比较繁琐,下面用递归实现:

具体思路:

由于n位数每一位都是由0到9组成的,所以通过全排列可以实现打印所有的数,

printnumber函数:判断递归是否到达最后一位,是则说明最后一位已经被赋值,打印number即可,否则继续递归赋值给下一位(从0到9开始)

具体代码如下:

//第二种方法实现(使用递归)
void printtomax2(int n)
{
try
{
if(n<=0)
throw exception("参数不合法");
char *number=new char[n+1];
number
='\0';
printnumber(number,n,-1);//调用递归方法
}
catch(exception e)
{
cerr<<e.what()<<endl;
}
}
void printnumber(char *number,int n,int index)
{
//判断最后一位数字是否已经赋值,是则打印
if(index==n-1)
{
Print(number);
return;
}
//否则递归赋值,直到到达最后一位
else
{
//从下一位开始,0-9依次赋值
for(int i=0;i<10;i++)
{
number[index+1]='0'+i;

printnumber(number,n,index+1);
}
}
}


Print函数:

//打印number中存的数字
void Print(char * number)
{
bool beginprint=false;//区分是前面的0还是数字中的0,为true的话就一直打印下去
int length=strlen(number);
for(int i=0;i<length;i++)
{
if(number[i]!='0'&&(beginprint==false))//如果遇到第一个非0数则设置beginprint为true,开始打印
beginprint=true;
if(beginprint)
cout<<number[i];
}
cout<<"   ";
}


测试函数以及运行结果:

int main()
{
printtomax2(2);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: