zoukankan      html  css  js  c++  java
  • 打印1到最大的n位数(递归实现)

    上一篇博客是用循环实现的,代码比较繁琐,下面用递归实现:

    具体思路:

    由于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]='';
            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;
    }

  • 相关阅读:
    vue
    生成数组方式
    绕过CDN查找真实IP方法
    SQL注入WAF绕过
    缓冲区溢出的保护机制
    Redis未授权漏洞
    AFL 漏洞挖掘
    python多线程与多进程
    Java8四大核心接口示例
    @Autowired抱空指针异常解决方案
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4509735.html
Copyright © 2011-2022 走看看