摘要: 尾递归 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工 阅读全文
posted @ 2017-05-13 21:22 秋天的竹子 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 斐波拉契数列的计算是一个非常经典的问题,对于小规模的n,很容易用递归的方式来获取,对于稍微大一点的n,为了避免递归调用的开销,可以用动态规划的思想轻松获得,时间复杂度为O(n),空间复杂度为O(1). 但是对于更大规模,需要矩阵法计算 阅读全文
posted @ 2017-05-13 21:17 秋天的竹子 阅读(1046) 评论(0) 推荐(0) 编辑
摘要: 用非递归方法计算斐波那契数列,节省时间,包括迭代法,中间变量保存法,公式法 阅读全文
posted @ 2017-05-13 21:03 秋天的竹子 阅读(4075) 评论(0) 推荐(0) 编辑
摘要: 简介 .NET 4包含新名称空间System.Threading.Tasks,它 包含的类抽象出了线程功能。 在后台使用ThreadPool。 任务表示应完成的某个单元的工作。 这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调线程。 使用任务不仅可以获得一个抽象层, 阅读全文
posted @ 2017-05-12 21:37 秋天的竹子 阅读(10937) 评论(0) 推荐(0) 编辑
摘要: C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用。具体而言,查询表达式将转换为以下名称的调用:Where、Select、SelectMany、Join、GroupJoin、OrderBy、OrderByDescending、ThenBy、ThenByDescending、GroupBy、Cast等等。   如同在前文中提到的用扩展方法和Lambda表达式简化LINQ查询表达式一般,这也是对查询表达式的一种转换。简化后的方法其实就是LINQ查询的实际执行。 阅读全文
posted @ 2017-05-12 21:10 秋天的竹子 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找、过滤等等常见的任务的时候,我们该如何去做呢?   我们可以自己写代码去对集合中的每个对象进行遍历,检查变量的每个字段看其是否满足条件。这样的故事已经发生太多次了,微软怎么可能容忍在C#里发生如此弱智的事情呢?于是,C#的设计者决定在C#中集成查询的语法,以最大限度地减少程序员书写类似代码的情况。   这也就是我们说的LINQ(Language Intergated Query)也就是语言集成查询,我们可以使用同样的语法访问不同的数据源。 阅读全文
posted @ 2017-05-12 20:54 秋天的竹子 阅读(395) 评论(1) 推荐(0) 编辑
摘要: 创建线程的一个简单方式是定义一个委托,并且异步调用它。委托是方法的类型安全的引用。Delegate类还支持异步地调用方法。在后台,Delegate类会创建一个执行任务的线程。 阅读全文
posted @ 2017-05-12 20:49 秋天的竹子 阅读(1208) 评论(0) 推荐(0) 编辑
摘要: 在C#中实现多线程的另一个方式是使用Parallel类。   在.NET4中 ,另一个新增的抽象线程是Parallel类 。这个类定义了并行的for和foreach的 静态方法。在为 for和 foreach定 义的语言中,循环从一个线程中运行 。Parallel类使用多个任务,因此使用多个线程来完成这个作业。   我们在前文中,对任务作出了一定的阐释,有兴趣的朋友可以前去查看。   Parallel.For()和 Parallel.ForEach()方法多次调用同一个方法,而 Parallel.Invoke()方法允许同时调用不同的方法。 阅读全文
posted @ 2017-05-12 20:06 秋天的竹子 阅读(2798) 评论(0) 推荐(0) 编辑
摘要: 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件、数据库、网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作。   这就可以使用线程来实现。   本文主要介绍关于Thread和ThreadPool的基础知识。 阅读全文
posted @ 2017-05-12 20:00 秋天的竹子 阅读(798) 评论(0) 推荐(0) 编辑
摘要: 关于协变和逆变要从面向对象继承说起。继承关系是指子类和父类之间的关系;子类从父类继承所以子类的实例也就是父类的实例。比如说Animal是父类,Dog是从Animal继承的子类;如果一个对象的类型是Dog,那么他必然是Animal。 协变逆变正是利用继承关系 对不同参数类型或返回值类型 的委托或者泛型接口之间做转变。 阅读全文
posted @ 2017-05-12 19:41 秋天的竹子 阅读(204) 评论(0) 推荐(0) 编辑