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);
                }
            }
        }
    }
  • 相关阅读:
    P3368 【模板】树状数组 2
    P3374 【模板】树状数组 1
    P1631 序列合并
    P1387 最大正方形
    P1197 [JSOI2008]星球大战
    P2866 [USACO06NOV]糟糕的一天Bad Hair Day
    P1196 [NOI2002]银河英雄传说
    SP1805 HISTOGRA
    P1334 瑞瑞的木板
    2019信息学夏令营游记
  • 原文地址:https://www.cnblogs.com/tobecabbage/p/3541479.html
Copyright © 2011-2022 走看看