递归算法和栈运行效率的比较

昨天写了一个递归程序遍历计算机上所有的文件,有网友说递归速度很慢,于是今早写了一个使用栈遍历计算机文件的程序,虽然计算机对递归算法的实现最终还是靠栈来实现。但和自己写的运行效率还有有些差别。

以下是时间对比,第一张图是使用得递归算法,第二张图使用的栈,使用栈来实现还是要快那么一点。使用递归的程序请参考我昨天的博客。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
            stopwatch.Start();
            List<string> allFileName = new List<string>();
            string[] drives = Directory.GetLogicalDrives();
            Stack<string> stack = new Stack<string>();
            foreach (string drive in drives)
            {
                stack.Push(drive);
            }
            string path;
            DirectoryInfo sDir;
            FileInfo[] fileArray;
            DirectoryInfo[] subDirArray;
            while (stack.Count > 0)
            {
                path = stack.Pop();
                sDir = new DirectoryInfo(path);
                try
                {
                    fileArray = sDir.GetFiles();
                    foreach (FileInfo file in fileArray)
                    {
                        allFileName.Add(file.FullName);
                    }
                }
                catch (Exception e)
                {
                }

try
                {
                    subDirArray = sDir.GetDirectories();
                    foreach (DirectoryInfo subDir in subDirArray)
                    {
                        stack.Push(subDir.FullName);
                    }
                }
                catch (Exception e)
                {
                }
            }
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed);
            Console.WriteLine(allFileName.Count);      
            Console.ReadLine();
        }      
    }
}

时间: 2024-10-28 21:09:17

递归算法和栈运行效率的比较的相关文章

C递归算法与栈的分析,非全然二叉树遍历分析---ShinePans

             对于递归,这里面的分析最好当然是用图形的方式来分析了.这里来总结一下 1.首先对于栈的理解: 先进后出,后进先出 先进后出 2.在进行非全然二叉树的存储之后,我们要做的是对其进行遍历或者索引,查找某个孩子,或某个左孩子或右孩子的双亲,不然存了是徒劳的. 非全然二叉树的存储: 我觉得最好的存储方式是动态链表,静态链表仅仅有在某些很特殊的情况下才行得通的选择,比方说已知这个二叉树就是这样,不会再改变 而对于动态链表,我觉得最好的方式是建立5个指针,一个数据域,这五个指针各自

递归算法经典实例小结(C#实现)

 一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身. (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口. (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低.所以一般不提倡用递归算法设计程序. (4) 在递归调用的过程当中

递归算法详解

http://blog.csdn.net/effective_coder/article/details/8742979                                                                                递归算法详解 C语言通过运行时堆栈来支持递归的调用,在我们刚接触递归的时候,国内很多教材都采用求阶乘和菲波那契数列来描述该思想,就如同深受大家敬爱的国产的C语言程序设计,老谭也用了阶乘来描述递归,以至于很多新手一看见阶乘

C语言——递归算法

递归算法:是一种直接或者间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归过程一般通过函数或子过程来实现. 递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题.然后递归调用函数(或过程)来表示问题的解. 递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身. (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口. (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低.所以一般不

有关递归算法的小例子

程序调用自身的编程技巧称为递归( recursion).一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合.用递归思想写出的程序往往十分简洁易懂.一般来说,递归需要有边界条件.递归前进段和递归返回段.当边界条件不满足时,递归前进:当边界条件满足时,递归返回. 注意: (1) 递

Java 递归算法

1.递归算法基本思路: Java递归算法是基于Java语言实现的递归算法.递归算法是一种直接或者间接调用自身函数或者方法的算法.递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解.递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维. 2.递归算法解决问题的特点: 递归就是方法里调用自身 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出

python之路(七)-递归算法

递归 特点 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身. (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口. (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低.所以一般不提倡用递归算法设计程序. (4) 在递归调用的过程当中系统为每一层的返回点.局部量等开辟了栈来存储.递归次数过多容易造成栈溢出等

[转]递归算法

原文地址:http://blog.csdn.net/wangjinyu501/article/details/8248492 一.基本概念 递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递归算法是基于Java语言实现的递归算法.递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解.递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解.递归算法,其实说白了,就是程序的自身调用.它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这

递归算法总结

在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法.递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口.(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低.所以一般不提倡用递归算法设计程序.(4) 在递归调用的过程当中系统为每一层的返回点.局部量等开