递归算法

一、递归的核心思想就是自己调用自己,一般来说能够用递归解决的问题应满足3个条件:

1.需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量和规模上不同。

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

3.必须有结束递归的条件来终止递归。

二、何时使用递归?

1.定义是递归的

有许多数学公式、数列和概念的定义是递归的。比如求n!,Fibonacci数列等。这些问题的求解过程是可以将其递归定义直接转化为对应的递归算法的。

比如求 n!

int fun(int n) {if(n==1) {    //递归头return(1);}else {        //递归体return (fun(n-1)*n);}
}

2.有些数据结构是递归的

单链表就是一种递归数据结构,其结点类型定义如下:

typedef struct LNode
{ElemType data;struct LNode *next;
}LinkList;

求一个不带头结点的单链表L所有的data域(假设为int类型)之和的递归算法如下:

int Sum(LinkList *L)
{if (L == NULL) {return 0;}else {return(L->data+sum(L->next));}
}

3.问题的求解方法是递归的

比如汉诺塔问题:

 三、递归的不足

简单的程序使递归的优点之一,但是递归调用会占用大量的系统堆栈,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

package day6;//递归的基本思想就是自己调用自己
public class digui {public static void main(String[] args) {long d1 = System.currentTimeMillis();System.out.printf("%d的阶乘的结果:%s%n",10,factorial(10));long d2 = System.currentTimeMillis();System.out.printf("递归费时:%s%n",d2-d1);factorialLoop(10);}static long factorial(int n) {if(n==1) {//递归头return 1;}else {//递归体return n*factorial(n-1);//n! = n*(n-1)!}//1*2*3*4...*10
    }static long factorialLoop(int a) {long d3 = System.currentTimeMillis();long result = 1;while(a>1) {result *= a*(a-1);a = a-2;}long d4 = System.currentTimeMillis();System.out.println("普通循环阶乘结果:"+result);System.out.printf("循环费时%s%n",d4-d3);return result;}
}

 

转载于:https://www.cnblogs.com/ma1998/p/11458182.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二项式公式

取 即得 转载于:https://www.cnblogs.com/zeenzhou/p/11462928.html

tomcat 部署 React 项目后,浏览器刷新报404问题

问题&#xff1a;tomcat部署了react前端项目&#xff0c;可以正常访问&#xff0c;但是页面刷新就报404 一、问题截图 二、解决办法 在tomcat 配置文件web.xml中配置如下代码&#xff1a; web.xml 路径&#xff1a; apache-tomcat-8.5\conf\web.xml <error-page><erro…

美国国家地理

美国国家地理图 (19) National Geographic, 夏威夷 上帝的花园, Hawaii, 19 garden-of-the-gods-90667-lw.jpg (148.7 KB)2008-7-9 09:27 AM上帝的花园 Garden of the Gods, Hawaii, 1996National Geographic Photo Of the DayPhotograph by Jim RichardsonA time-exposed phot…

微软独立虚拟机Hyper-V Server 2008

微软9月底如约发布了独立虚拟机操作系统Hyper-V Server 2008&#xff0c;并提供免费下载和使用&#xff0c;用户无需支付40美元即可获得来自微软的虚拟化方案。与之前集成在Windows Server 2008里的Hyper-V模块/插件不同&#xff0c;Hyper-V Server 2008是一个独立的服务器操作…

js的正则处理

1.search()方法&#xff0c;返回首次出现位置&#xff0c;如果找不到匹配则返回-1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> …

于elasticsearch-rest-high-level-client 操作 Es

安装Java&#xff1a;要求JDK为1.8及以上版本。创建阿里云Elasticsearch实例&#xff1a;实例版本要求大于等于elasticsearch-rest-high-level-client的版本。本文创建一个6.3.2版本的实例。 注意 High Level Client能够向上兼容&#xff0c;例如6.3.2版本的elasticsearch-rest…

序列图

序列图主要用于按照交互发生的一系列顺序&#xff0c;显示对象之间的这些交互。很象类图&#xff0c;开发者一般认为序列图只对他们有意义。然而&#xff0c;一个组织的业务人员会发现&#xff0c;序列图显示不同的业务对象如何交互&#xff0c;对于交流当前业务如何进行很有用…

MS SQL Server 2008 简体中文正式版下载地址(附序列号)

Microsoft SQL Server 2008 Enterprise Evaluation&#xff1a;开发人员试用体验http://www.microsoft.com/downloads/details.aspx?FamilyId6B10C7C1-4F97-42C4-9362-58D4D088CD38&displaylangzh-cn Microsoft SQL Server 2008 Enterprise Evaluation&#xff1a;IT 专业…

小型网络的组建及排错

今天施工 给公司组建了一小型网络 以下是此次施工的拓扑图具体的实施方法不再啰嗦&#xff0c;在此要声明配线架只是起到了方便管理的作用&#xff0c;实施过程中也可以不用到配线架。 房间1又通过一HUB共享上网&#xff0c;房间2有两个客户端&#xff0c;直接连接到2924交换机…

大道五目Flash英文版(Renju Problems)程序分析之禁手判断

现在界面已经完成了&#xff0c; 刚刚完成了禁手算法&#xff0c;把代码共享出来&#xff1a; Codeprivate function IsForbidden(x:int, y:int, board:Array):int { var index:int x*15y; // set this position(x,y) to black. …

Google Earth的十个常用技巧应用

2004年10月27日Google宣布收购了美国的一家卫星图像公司Keyhole公司&#xff0c;并于2005年6月推出了Google Earth系列软件。用户们可以通过下载一个Google Earth客户端软件&#xff0c;就可以免费浏览全球各地的高清晰度卫星图片。 Google卫星地图的横空出世&#xff0c;催生了…

BENET上海分公司网络改造项目设计实施方案(S1项目实践)

BENET上海分公司网络改造项目设计实施方案 目录 目录- - 1 - 一、企业用户需求分析- - 2 - 1.1、项目概述-- - 2 - 1.2、系统需求概括-- - 3 - 1.3、项目建设的要求-- - 4 - 二、项目方案的整体设计与实施- - 5 - 2.1、网络系统的分析与设计-- - 5 - 2.2、系统及应用服务的分析…

IIS6.0应用程序池回收和工作进程【转:http://www.cnblogs.com/freshman0216/archive/2008/06/02/1212460.html】...

公司的一个网站程序长时间运行后&#xff0c;速度变慢&#xff0c;重新启动网站后速度明显变快&#xff0c;估计是网站程序占用的内存和CPU资源没能及时释放&#xff0c;才需要每隔一段时间重启网站释放资源。但手工重启总不能算解决问题的方法&#xff0c;怎样才能实现自动管理…

配置IPsec on GRE Tunnel with IOS Firewall and NAT

配置IPsec on GRE Tunnel with IOS Firewall and NAT<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />详细配置见附件

广播地址详谈!

一、问题的提出大家看到这个标题&#xff0c;一定会觉得非常简单&#xff0c;不错&#xff0c;对于高手们来说&#xff0c;这确实不值一提&#xff0c;但是&#xff0c;对于广大非高手的兄弟&#xff0c;还是有必要了解一下。以前&#xff0c;我对广播地址的认识也是模模糊糊&a…

多核分布式队列的实现:“偷”与“自私”的运用(1)

多核分布式队列的实现&#xff1a;"偷"与"自私"的运用 在讨论本文的正题前&#xff0c;不得不先说一些闲话&#xff0c;嫌哆嗦者可以跳过"前言"部分不读。1. 前言在发表了"老子是伟大的多核计算科学家" &#xff08;链接&#xff1a;[…

近期刷题记录表

9月14日&#xff1a;   luogu P1627 [CQOI2009]中位数 题意&#xff1a;给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后&#xff0c;位于中间的数。 题解&#xff1a;根据中位数的性质&#xff0c…

《性能测试从零开始--LoadRunner入门》读书笔记(四)

终于看完了澳网的赛事了&#xff0c;今天要把第五章的读书笔记完成&#xff0c;哈哈。 4.参数化 书中花了不少力气说明这方面的用法&#xff0c;可见参数化在整个脚本的制作过程中的重要性。在这个session开始的时候&#xff0c;书使用了不少的废话去说明白参数化的意义和参数化…

我的RSS我做主:My RSS

昨天晚上通过google reader 浏览自己的网站时发现&#xff0c;Rss输出的内容比较简单&#xff0c;没有我想输出内容,诸如“评论数”、“评论文章”&#xff0c;“永久链接”等等。修改wordpress RSS 输出函数话&#xff0c;每次更新更新wordpress又要重新改一次&#xff0c;比较…

luogu P3407 散步 二分答案

题目描述 一条道路上&#xff0c;位置点用整数A表示。 当A0时&#xff0c;有一个王宫。当A>0&#xff0c;就是离王宫的东边有A米&#xff0c;当A<0&#xff0c;就是离王宫的西边有A米。 道路上&#xff0c;有N个住宅从西向东用1-N来标号。每个住宅有一个人。住宅只会存在…