递归——方法调用自身

 递归是指函数在运行过程中直接或间接调用自身而产生的重入现象。递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰。

下面是一个简单的用来理解递归的示例程序:读取给定目录中文件夹和子目录中指定文件文本的行数。

 1 using System;
2 using System.IO;
3
4 class Program
5 {
6 static void Main(string[] args)
7 {
8 int totalLineCount = 0;
9 string directory = @"D:\Csharp";
10
11 totalLineCount = DirectoryCountLines(directory);
12 Console.WriteLine(totalLineCount);
13 Console.Read();
14 }
15
16 /// <summary>
17   /// 计算给定文件夹中文件的行数
18   /// </summary>
19   /// <param name="directory"></param>
20   /// <returns></returns>
21 static int DirectoryCountLines(string directory)
22 {
23 int lineCount = 0;
24 try
25 {
26 //获取目录中指定文件的集合,并遍历它们
27 foreach (string file in Directory.GetFiles(directory, "*.cs"))
28 {
29 //计算该文件中文本的行数
30 lineCount += CountLines(file);
31 }
32 //获取目录中子目录的名称
33 foreach (string subdirectory in Directory.GetDirectories(directory))
34 {
35 lineCount += DirectoryCountLines(subdirectory);//方法调用自身
36 }
37
38 }
39 catch (Exception)
40 {
41 Console.WriteLine("找不到相应的路径");
42 }
43 return lineCount;
44 }
45
46 /// <summary>
47   /// 计算一个cs后缀结尾文件的行数
48   /// </summary>
49   /// <param name="file"></param>
50   /// <returns></returns>
51 private static int CountLines(string file)
52 {
53 string line;
54 int lineCount = 0;
55 FileStream stream = new FileStream(file, FileMode.Open);
56 StreamReader reader = new StreamReader(stream);
57 line = reader.ReadLine();
58
59 while (line != null)
60 {
61 if (line.Trim() != null)
62 {
63 lineCount++;
64 }
65 line = reader.ReadLine();
66 }
67 reader.Close();
68 return lineCount;
69 }
70 }


使用递归计算乘阶

 1     // 递归计算乘阶
 2     // 1,2,6,24,120
 3     // n=1,1*1 =1
 4     // n=2,1*2 =2
 5     // n=3,1*2*3 =6
 6     // n=4,1*2*3*4 =24
 7     // n=5,1*2*3*4*5 =120
 8     public static int Factorial(int n){
 9         if(n == 1) {
10             return 1;
11         }
12         return n * Factorial(n-1);
13     }

 

posted @ 2012-03-27 11:08  gyzhao  阅读(1041)  评论(0编辑  收藏  举报