zoukankan      html  css  js  c++  java
  • 递归

    • 递归的定义:

      除了调用其他方法,方法也可以调用自身,这叫做递归。

      递归可以产生很优雅的代码,比如下面的方法计算阶乘的代码就是如此。注意在方法的内部,方法使用比输入参数小1的实参调用自身。

    int Factorial(int inValue){
         if(inValue<=1){
            return inValue;
        }
        else{
            return inValue*Factorial(inValue-1);//调用自身
        }
    }

      调用方法自身的机制和调用其他方法一样。都是为每次方法调用把新的栈桢压入栈顶。

      例如下面的代码中,Count()方法使用比输入参数小于1的值 调用自身然后输出输入参数,随着递归越来越深,栈也越来越大

    class Program{
        public void Count(int inval){
            if(inval==0){
                 return;
            }
            Count(inVal-1);
            Console.WriteLine("0",inVal);
        } 
        public void Main(){
            Program p=new Program();
            p.Count(3); 
        }   
    }

    这段代码产生的结果是:1
               2

               3

     

     递归遍历文件夹中的文件,代码如下

      class Program
        {
            static void Main(string[] args)
            {
                List<string> ls=new List<string>();
                string root = "v8";
                GetMain(root,ls);
                System.IO.File.WriteAllLines("查找结果.txt",ls);
                Console.WriteLine("ok");
                Console.ReadKey();
            }
            static void GetMain(string root,List<string> ls) { 
                string[] files = System.IO.Directory.GetFiles(root);
                for (int i = 0; i <files.Length; i++)
                {
                    string text = System.IO.File.ReadAllText(files[i]);
                    if(text.Contains("Main(")){
                        ls.Add(files[i]);
                    }
                }
                string[] dirs = System.IO.Directory.GetDirectories(root);
                for (int i = 0; i < dirs.Length; i++)
                {
                    GetMain(dirs[i], ls);
                }
            }
        }

    山寨版阅读器,代码:
    说明,需要了解TreeView控件的使用

    namespace 山寨阅读器
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                string root = "txt";
                TreeNode tn=treeView1.Nodes.Add("小说");
                CreatTreeNode(root, tn);
                tn.Expand();
            }
            public void CreatTreeNode(string root,TreeNode tn) {
                string[] dirs = System.IO.Directory.GetDirectories(root);
                for (int i = 0; i < dirs.Length; i++)
                {
                   TreeNode tn1= tn.Nodes.Add(System.IO.Path.GetFileName(dirs[i]));
                   CreatTreeNode(dirs[i],tn1);     
                }
                string[] files = System.IO.Directory.GetFiles(root);
                for (int i = 0; i < files.Length; i++)
                {
                   TreeNode  tn1=tn.Nodes.Add(System.IO.Path.GetFileName(files[i]));
                    tn1.Tag = files[i];
                }
            }
    
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                TreeNode tn = e.Node;
                string file = tn.Tag as string;
                if(file!=null && file.Contains(".txt")){
                    textBox1.Text = System.IO.File.ReadAllText(file,Encoding.Default);
                }
            }
        }
    }
  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/tobecabbage/p/3541479.html
Copyright © 2011-2022 走看看