上一篇博客是用循环实现的,代码比较繁琐,下面用递归实现:
具体思路:
由于n位数每一位都是由0到9组成的,所以通过全排列可以实现打印所有的数,
printnumber函数:判断递归是否到达最后一位,是则说明最后一位已经被赋值,打印number即可,否则继续递归赋值给下一位(从0到9开始)
具体代码如下:
//第二种方法实现(使用递归) void printtomax2(int n) { try { if(n<=0) throw exception("参数不合法"); char *number=new char[n+1]; number[n]='\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; }