首页 >> WEB开发

C#递归算法及一些C#递归的应用实例

2011-03-11 17:07:30

 

C#递归算法及一些C#递归的应用实例:

C#递归的应用来解决文件的逐级展开是十分有实用性的操作,那么具体的执行是怎么样子的呢?让我们看看这里向你展示的实例实现。

计算数组{1,1,2,3,5,8.......} 第30位值,不用递归,写出了以下这样的代码:

static void Main(string[] args)
{
int[] num=new int[30];
num[0]=1;
num[1]=1;
int first=num[0];
int second=num[1];
for (int i = 2; i < num.Length; i++)
{
num[i] = first + second;
first = second;
second = num[i];
}
Console.WriteLine(num[29]);
Console.ReadLine();
}
写出来,十分的累赘,于是改为归递算法来写,一目了然,十分明了。以下是代码:

static void Main(string[] args)
{
Console.WriteLine(Process1(30));
Console.ReadLine();
}
public static int Process1(int i)
{
//计算数组{1,1,2,3,5,8.......} 第30位值
if (i == 0) return 0;
if (i == 1) return 1;
else
return Process1(i - 1) + Process1(i - 2);
}
//做了一些练习: 1. 计算1+2+3+4+...+100的值

2. 计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值


//1. 计算1+2+3+4+...+100的值
static void Main(string[] args)
{
Console.WriteLine(Recursive(100));
Console.ReadLine();
}
public static int Recursive(int i)
{
//计算1+2+3+4+...+100的值
if (i == 0) return 0;
return Recursive(i - 1) + i;
}
//2. 计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值
static void Main(string[] args)
{
Console.WriteLine(Recursive(9) - Recursive(8));
Console.ReadLine();
}

public static int Recursive(int i)
{
//计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值
if (i == 0) return 1;
if (i == 1) return 2;
else return Recursive(i - 2) + i;
}
应用实例:

C#递归的应用是可以让繁琐的问题的变得简单可执行,那么具体的实例就是打开文件的操作,我们知道获得某一目录下第一级的所有文件和文件夹列表,很容易办到:

DirectoryInfo di=new DirectoryInfo(strBaseDir);//strBaseDir是起始目录,绝对地址
DirectoryInfo[] diA=di.GetDirectories();//获得了所有一级子目录
FileInfo[] fiA=di.GetFiles();//获得了所有起始目录下的文件
要是想获得某一目录下的所有文件和目录(包含所有子目录),那该怎么办呢?目录都是一层套一层的,我们不能预知某个目录的深度,只有获得了父节点,才有可能了解子节点,解决这个问题,只有递归这个概念了。

C#递归的简单理解,它就是一个方法,在这个方法里面,再次调用它本身这个方法,从而描述了某一事物运作的深度…… - - 不废话了,看代码吧:

C#递归实现代码

public ArrayList al=new ArrayList();

//我把ArrayList当成动态数组用,非常好用

public void GetAllDirList(string strBaseDir)

{

DirectoryInfo di=new DirectoryInfo(strBaseDir);

DirectoryInfo[] diA=di.GetDirectories();

for(int i=0;i<diA.Length;i++)

{

al.Add(diA[i].FullName);

//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中

GetAllDirList(diA[i].FullName);

//注意:这里使用C#递归的方法

}

}

最后,如何把所有目录信息从ArrayList中取出来呢?如下:

 

for(int i=0;i<al.Count;i++)

{

textBox1.AppendText(al[i].ToString()+" ");

//textBox1是容器,拷贝我的代码,注意要换一个你自己的容器

}

C#递归方法的应用就向你介绍到这里,希望对你理解和学习C#递归以及应用有所帮助。