C++抽象编程——递归策略——前言
2017-04-16 13:31
363 查看
接下来总结的就是递归的核心内容——递归策略(Recursive Strategies),本来我是想接着递归简介就写这个的,但是书本上的很多例子都是利用STL实现的,正如我在STL的心得中讲的,那本书上的很多出口的方法都是它们学校自己的接口提供的,我们要自己去实现。其实我也没想到STL会包含那么多的知识点而已。那个系列确实是写了很多,也很久。但是在另外一个方面,我收获也是不少。
终于可以动手去写这个系列了,心里还是有点小激动的,很多人都说递归是算法的基础,也算是我第一次接触的算法吧。下面先进行个大致的了解:
当递归分解直接来自数学定义时,如在递归简介中的fac和fib函数的情况下,应用递归并不是特别困难,因为在大多数情况下,我们可以通过将适当的表达式插入到标准递归范例中将数学定义直接转换为递归实现。然而,当我们开始解决更复杂的问题时,情况会发生变化。
这次介绍几个是至少不会是在表面上的编程问题,比递归简介中的更难。事实上,如果我们尝试在不使用递归的情况下解决这些问题,则依赖于更熟悉的迭代技术(即循环),你会发现它们很难解决。相比之下,每个问题都有一个令人惊讶的递归解决方案。如果您利用递归的功能,每行任务就可以只使用几行代码。。
这些解决方案的简洁使我们对它们有一些误解。这个时候我们要知道解决这些问题的难点与代码的长度无关。使这些程序变得困难的是首先发现递归分解(也就是我们前面介绍的recursive decomposition)。 这样做偶尔需要一些聪明才智,但是你所需要的更多是信心。 你必须接受recursive leap of faith。
所以,总结一点,学习这个系列,你至少知道这些东西:
1. 递归范式
2. recursive leap of faith
3. STL的基本操作
这些我在前面的博文都有介绍的。下面的博文就来进入正题。
终于可以动手去写这个系列了,心里还是有点小激动的,很多人都说递归是算法的基础,也算是我第一次接触的算法吧。下面先进行个大致的了解:
当递归分解直接来自数学定义时,如在递归简介中的fac和fib函数的情况下,应用递归并不是特别困难,因为在大多数情况下,我们可以通过将适当的表达式插入到标准递归范例中将数学定义直接转换为递归实现。然而,当我们开始解决更复杂的问题时,情况会发生变化。
这次介绍几个是至少不会是在表面上的编程问题,比递归简介中的更难。事实上,如果我们尝试在不使用递归的情况下解决这些问题,则依赖于更熟悉的迭代技术(即循环),你会发现它们很难解决。相比之下,每个问题都有一个令人惊讶的递归解决方案。如果您利用递归的功能,每行任务就可以只使用几行代码。。
这些解决方案的简洁使我们对它们有一些误解。这个时候我们要知道解决这些问题的难点与代码的长度无关。使这些程序变得困难的是首先发现递归分解(也就是我们前面介绍的recursive decomposition)。 这样做偶尔需要一些聪明才智,但是你所需要的更多是信心。 你必须接受recursive leap of faith。
所以,总结一点,学习这个系列,你至少知道这些东西:
1. 递归范式
2. recursive leap of faith
3. STL的基本操作
这些我在前面的博文都有介绍的。下面的博文就来进入正题。
相关文章推荐
- C++抽象编程——递归策略(3)——生成排列数(2)
- C++抽象编程——递归策略(1)——汉诺塔问题详解(1)
- C++抽象编程——递归简介(5)——检查回文数,折半查找
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- 整数划分问题(递归策略)
- Thinking in C++ (1-10) 迁移策略
- 高质量C++/C编程指南 -- 前言
- 函数的递归调用与分治策略
- Thinking in C++ 第二版 简体中文版 前言
- 递归与分治策略
- 高质量C++/C编程指南 -- 前言
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- Head First 设计模式 C++实现-Strategy(策略模式)
- 转载 AVL(平衡树)C++代码(非递归)
- c++实现的递归搜索迷宫类
- C++主题——策略模式
- 高质量C++/C编程指南 - 前言
- C/C++用递归的方法求链表逆序
- C/C++面试之算法系列--从"反转32 位数"算法题分析面试策略
- AVL(平衡树)C++代码(非递归)