- 递归的定义:
除了调用其他方法,方法也可以调用自身,这叫做递归。
递归可以产生很优雅的代码,比如下面的方法计算阶乘的代码就是如此。注意在方法的内部,方法使用比输入参数小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); } } } }