递归算法核心思想

递归是一种函数或方法中调用自身的编程技术,递归思想在于把大问题分解为小问题,进一步分解为更小的问题,直到每个小问题可以解决为止,也就是说,递归就是

用与自己相似但规模较小的问题来描述自己。

递归算法的三个特性:

1,求解规模为n的问题可以转化为一个或多个结构相同规模较小的的问题,然后从这些较小的问题可以方便构造出大问题的解

2,递归调用的次数必须是有限的

3,递归必定有结束条件来终止递归,

递归的算法执行过程为递推和递归两个阶段。在递推阶段,将规模为n的问题的求解递推到比原来规模小的问题的求解,而且必须有终止递归的条件。在回归阶段,在获得最简单问题的解后,逐级返回,依次得到规模较大问题的解。递归算法无论是在空间还是时间上耗费量都比扑通算法要多,在算法设计时经常将递归算法转化为非递归算法,转化方法有以下3种:

1,通过分析跳过分解步骤,直接用循环结构来求值

2,用栈保存程序的运行过程,通过分析只保存必须保存的信息,从而利用非递归算法代替递归算法

3,利用栈保存参数,由于栈的后进先出的特性与递归算法的执行相吻合,因而可以用非递归算法代替递归算法

时间: 2024-10-05 03:48:29

递归算法核心思想的相关文章

vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想

一:MVVM框架 MVVM框架的应用场景:  1.针对具有复杂交互逻辑的前端应用 2.提供基础的架构抽象 3.提供ajax数据持久化,保证前端用户体验 二:vue.js的核心思想 (一):数据驱动 (二):数据响应原理 (三):组件化 (四)组件设计原则 1:页面上每个独立的可视/可交互区域视为一个组件 2:每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护 3:页面只不过是组件的容器,组件可以嵌套自由组合形成完整的页面

jQuery的核心思想

jQuery?----www.jQuery.com jQuery的理念:write less, do more jQuery的成就:世界排名前100的公司,46%都在使用jQuery,远远超过其他库,微软公司甚至把jQuery库 作为了他们的官方库. what is jQuery?(这是我复制官网上的介绍,觉得说的很专业) jQuery is a fast, small, and feature-rich(功能丰富) JavaScript library. It makes things lik

Rookey.Frame v1.0 视频教程之三发布-框架核心思想介绍

本期发布视频: (三)Rookey.Frame v1.0框架核心思想 介绍了Rookey.Frame v1.0框架搭建的核心思想,将框架核心思想理解清楚,对框架运行就会得心应手 官方视频教程: http://rookey.gotoip2.com/Page/Example.html?page=Example&flag=Video 下期视频将介绍如何通过Rookey.Frame v1.0极速开发平台项目结构及核心代码介绍

hadoop的核心思想【转】

[转自]:http://www.superwu.cn/2014/01/10/963/ 1.1.1. hadoop的核心思想 Hadoop包括两大核心,分布式存储系统和分布式计算系统. 1.1.1.1. 分布式存储 为什么数据需要存储在分布式的系统中哪,难道单一的计算机存储不了吗,难道现在的几个TB的硬盘装不下这些数据吗?事实上,确实装不下.比如,很多的电信通话记录就存储在很多台服务器的很多硬盘中.那么,要处理这么多数据,必须从一台一台服务器分别读取数据和写入数据,太麻烦了! 我们希望有一种文件系

RAID2.0核心思想:数据保护与物理资源管理域分离

记得在2013年末的时候,开始将存储虚拟化为主导的数据保护技术归纳为RAID2.0.从市场的角度来看,这个一个非常好的概念,一方面可以延续传统RAID的思想,大家可以很容易明白这是一种数据保护技术:另一方面又表述了这是一种传统RAID的技术延伸,而且具有更新换代的意思.在技术发展的过程中,HP称这种技术为virtual RAID:NetApp称之为DDP(Dynamic Disk Pool).本质上的思想是相同的,都是通过底层虚拟化的方式使得RAID构建的灵活性大为增加,并且在数据恢复的时候能够

Hibernate核心思想—ORM机制(一)

转:http://blog.csdn.net/wanghuan203/article/details/7566518 hibernate是一个采用ORM(Object/Relation Mapping对象关系映射)机制持久层的开源框架 其主要核心思想是面向对象,而非面向过程,而这个面向对象则主要通过ORM实现. ORM是将表与表之间的操作,映射成对象和对象之间的操作,就是通过操作实体类来达到操作表的目的.从数据库提取的数据会自动按你设置的映射要求封装成特定的对象.之后你就可以通过对对象进行操作来

数据挖掘十大算法总结--核心思想,算法优缺点,应用领域

本文所涉算法均只概述核心思想,具体实现细节参看本博客"数据挖掘算法学习"分类下其他文章,不定期更新中.转载请注明出处,谢谢. 参考了许多资料加上个人理解,对十大算法进行如下分类: ?分类算法:C4.5,CART,Adaboost,NaiveBayes,KNN,SVM ?聚类算法:KMeans ?统计学习:EM ?关联分析:Apriori ?链接挖掘:PageRank 其中,EM算法虽可以用来聚类,但是由于EM算法进行迭代速度很慢,比kMeans性能差很多,并且KMeans算法 聚类效果

java核心思想

第一章 多线程 多线程和多进程之间的区别: 本质区别在于每个进程有他自己的变量的完备集,线程则共享相同的数据,这个听起来似乎有些危险,事实上也的确如此,你将会在本章后面的内容中看到这个问题,尽管如此,对于程序来说,共享的变量使线程之间的通信 比进程间的通信更加有效简单,而且,对于某些操作系统而言,线程比进程更加轻量级.创建和销毁单个线程比发起进程的开销要小很多. 线程优先级 在Java程序设计语言中,每一个线程都有一个优先级,默认情况下,一个线程继承他的父线程的优先级,一个线程的父线程就是启动他

《深入理解SPARK:核心思想与源码分析》——SparkContext的初始化(中)

<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析>一书第一章的内容请看链接<第1章 环境准备> <深入理解Spark:核心思想与源码分析>一书第二章的内容请看链接<第2章 SPARK设计理念与基本架构> 由于本书的第3章内容较多,所以打算分别开辟三篇随笔分别展现. <深入理解Spark:核心思想与源码分析>一