打印1到最大的n位数(递归实现)
2015-05-17 15:03
302 查看
上一篇博客是用循环实现的,代码比较繁琐,下面用递归实现:
具体思路:
由于n位数每一位都是由0到9组成的,所以通过全排列可以实现打印所有的数,
printnumber函数:判断递归是否到达最后一位,是则说明最后一位已经被赋值,打印number即可,否则继续递归赋值给下一位(从0到9开始)
具体代码如下:
Print函数:
测试函数以及运行结果:
具体思路:
由于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; }
相关文章推荐
- 面试题12:打印1到最大的n位数-大数问题-递归实现多层循环
- 面试题12: 打印1到最大的n位数(递归解法,全排列的递归解法)
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
- 剑指offer--面试题12:打印1到最大的n位数--Java实现
- 打印1到最大的n位数----java实现
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- 递归思想实现大数问题(打印1到n位最大整数)
- 剑指Offer 面试题17:打印从1到最大的n位数 Java代码实现
- 剑指Offer面试题12:打印1到最大的n位数 Java实现
- [剑指offer] 打印1到最大的n位数(JAVA实现)
- 写函数实现打印出1到最大的n位数,形参为n位数
- 二进制中1的个数 & 打印1到最大的n位数 Java实现
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- 【编程题目】打印1到最大的n位数——关于大数问题的探讨(C++实现)
- 剑指Offer——打印1到最大的n位数(好题)(java实现)
- C++实现打印1到最大的n位数
- 实现自己的pow函数&&打印1到最大的n位数
- 打印1到最大的n位数(Java实现)
- 12 打印1到最大的N位数(递归和非递归解法)
- 递归思想实现大数问题(打印1到n位最大整数)