• 递归


    • 递归的定义:

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

      递归可以产生很优雅的代码,比如下面的方法计算阶乘的代码就是如此。注意在方法的内部,方法使用比输入参数小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);
                }
            }
        }
    }
  • 相关阅读:
    Codeforces Round #619 (Div. 2) ABC 题解
    Codeforces Round #669 ABC 题解
    中大ACM个人赛 ABC题题解
    Codeforces Round #601 (Div. 2) ABC 题解
    SCAU 2019年校赛 部分题解
    SCAU 2018年新生赛 初出茅庐 全题解
    Educational Codeforces Round 74 (Rated for Div. 2) ABC 题解
    Codeforces Round #603 (Div. 2) ABC 题解
    【题解】 CF767E Change-free 带悔贪心
    【题解】 NOIp2013 华容道 最短路+状态压缩 Luogu1979
  • 原文地址:https://www.cnblogs.com/tobecabbage/p/3541479.html
Copyright © 2020-2023  润新知