《数据结构》课程教学资源:第六章 递归

第σ章邁妇 61什么是递归 62递归調用的实视原理 本章小结
启迪管理课程 第6章 递归 6.1 什么是递归 6.2 递归调用的实现原理 本章小结

61什么是递归 6.,1递归的定义 在定义一个过程或函数时出现调用本过 程或本函数的成分称之为递归。若调用自身, 称之为直接递归。若过程或函数p调用过程 或函数q,而q又调用p,称之为间接递归
启迪管理课程 6.1.1 递归的定义 在定义一个过程或函数时出现调用本过 程或本函数的成分,称之为递归。若调用自身, 称之为直接递归。若过程或函数p调用过程 或函数q,而q又调用p,称之为间接递归。 6.1 什么是递归

61什么是递归 例61以下是求m(m为正整数)的递归函数。 int fun(int n) int x; if(n==1) 体语句1*/ return(1); 语句2*/ else /语句3 return(fun(n-1)*n);/语句4*/ 在该函数fun(n)求解过程中,直接调用fun(n-1)(语 句4)自身,所以它是一个直接递归函数。又由于递归调 用是最后一条语句,所以它又属于尾递归。 3
启迪管理课程 例6.1 以下是求n!(n为正整数)的递归函数。 6.1 什么是递归 int fun(int n) { int x; if (n==1) /*语句1*/ return (1); /*语句2*/ else /*语句3*/ return(fun(n-1)*n); /*语句4*/ } 在该函数fun(n)求解过程中,直接调用fun(n-1)(语 句4)自身,所以它是一个直接递归函数。又由于递归调 用是最后一条语句,所以它又属于尾递归

61什么是递归 61.2何时使用递归 递归使用的场合有如下三种: 1.定义是递归的 数学公式、数列等的定义是递归的,例: f()=f(-1)+f(-2)f(1)=f(2)=1 这些问题的求解过程可以将其递归定义直接 转化为对应的递归算法
启迪管理课程 6.1.2 何时使用递归 递归使用的场合有如下三种: 1. 定义是递归的 数学公式、数列等的定义是递归的,例: 这些问题的求解过程可以将其递归定义直接 转化为对应的递归算法。 n! (n 1)!*n n 1时, n! 1 f(n)f(n1)f(n2) f(1)f(2)1 6.1 什么是递归

61什么是递归 2.数据结构是递归的 有些数据结构是递归的。例如,单链表就是一种递 归数据结构,其结点类型定义如下: typedef struct LNode Elem Type data; struct LNode *next 3 Linklist; 该定义中结构体 LNode的定义中用到了它自身,即 指针域next是一种指向自身类型的指针,所以它是一种 递归数据结构 5
启迪管理课程 2. 数据结构是递归的 有些数据结构是递归的。例如, 单链表就是一种递 归数据结构,其结点类型定义如下: typedef struct LNode { ElemType data; struct LNode *next; } LinkList; 该定义中,结构体LNode的定义中用到了它自身,即 指针域next是一种指向自身类型的指针,所以它是一种 递归数据结构。 6.1 什么是递归

61什么是递归 求一个不带头结点的单链表head的所有data域(假设为 int型)之和的递归算法如下 head a 非递归的算法: head; sum=0; while(p!-nullsum=sum+p->data; p=p->next 递归算法 int Sum Linklist *head) if (head==null return 0 else return (head->data+ Sum(head->next) 6
启迪管理课程 求一个不带头结点的单链表head的所有data域(假设为 int型)之和的递归算法如下: int Sum(LinkList *head) { if (head==NULL) return 0; else return(head->data+Sum(head->next)); } head a1 a2 …... an ^ 非递归的算法: p=head; sum=0; while (p!=NULL) {sum=sum+p->data; p=p->next;} 6.1 什么是递归 递归算法:

61什么是递归 3.问题的求解方法是递归的 典型的有Hano问题求解 设:有X、Y、Z三个塔座,在X上按直径大小递减次序依次插 有n个直径各不相同的圆盘,各圆盘按直径从小到大编为1-n 要求:将X塔上的n个圆盘按规则移至Z上,并仍按同样顺序 叠排 移动规则:①每次只能移动一个圆盘:②移动的圆盘可以插 在任一塔座上,但是在任一时刻都不能将大盘压在小盘上
启迪管理课程 3. 问题的求解方法是递归的 典型的有Hanoi问题求解 6.1 什么是递归

61什么是递归 例:计算两个非负整数a*b的算法 1.迭代方式:a=a个b之和2.递归方式:a中=b+(a-1)畅 int Mull(int a, int b) int Mul2(int a, int b) i int i, c=0; i if(a==0)return 0 for(i=0; i<a; i++) else return(b+Mul2(a-1, b c+=b: return c. 8
启迪管理课程 6.1 什么是递归 例:计算两个非负整数a*b的算法 int Mul1(int a, int b) { int i,c=0; for(i=0;i<a;i++) c+=b; return c; } 1.迭代方式:a*b=a个b之和 2.递归方式:a*b=b+(a-1)*b int Mul2(int a, int b) { if(a==0) return 0; else return(b+Mul2(a-1,b) }

61什么是递归 △→递归的关键点: ①用较简单的新问题来表示较复杂的原问题。例如 n!=n(n-1)!或n!=(n+1)!/(n+1)前者(n-1)!较n! 简单,可行;后者(n+1)!较n!更复杂,不可行。 ②不能产生自己调用自己的无穷序列,即必须有一 个递归调用序列的“出口”,来终止递归调用。 △递归的实现:递归过程都是通过栈来实现的, 并且任何递归算法均可通过栈改写为非递归算 法
启迪管理课程 6.1 什么是递归 !递归的关键点: !递归的实现:递归过程都是通过栈来实现的, 并且任何递归算法均可通过栈改写为非递归算 法。 ①用较简单的新问题来表示较复杂的原问题。例如 n!=n(n-1)!或n!=(n+1)!/(n+1) 前者(n-1)!较n! 简单,可行;后者(n+1)!较n!更复杂,不可行。 ②不能产生自己调用自己的无穷序列,即必须有一 个递归调用序列的“出口” ,来终止递归调用

61什么是递归 递归的特点:是程序设计的一个强有力的工 具,它具有结构清晰,程序易编、易读、易 调试,程序正确性易证明等优点;但运行效 率低。 △递归基本原理:是重复地把问题转化为与原 问题相似的新问题,直到问题可以解决为止 10
启迪管理课程 6.1 什么是递归 !递归的特点:是程序设计的一个强有力的工 具,它具有结构清晰,程序易编、易读、易 调试,程序正确性易证明等优点;但运行效 率低。 !递归基本原理:是重复地把问题转化为与原 问题相似的新问题,直到问题可以解决为止
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《数据结构》课程教学资源:第五章 数组和稀疏矩阵.ppt
- 《数据结构》课程教学资源:第二章 线性表.ppt
- 《数据结构》课程教学资源:第九章 图.ppt
- 《数据结构》课程教学资源:第三章 栈和队列.ppt
- 《数据结构》课程教学资源:第七章 树和二叉树.ppt
- 《数据结构》课程教学资源:第一章 绪论.ppt
- 《计算机组成原理》课程教学资源:附录——试题类型及解答.ppt
- 《计算机组成原理》课程教学资源:控制器教学实验.ppt
- 《计算机组成原理》课程教学资源:直播课堂内容.ppt
- 《计算机组成原理》课程教学资源:期未复习指导.ppt
- 清华大学:《编译原理》课程教学资源_语法分析.ppt
- 清华大学:《编译原理》课程教学资源_总结.ppt
- 清华大学:《编译原理》课程教学资源_第六章 补充算符优先分析.ppt
- 清华大学:《编译原理》课程教学资源_第六章 LR分析 6.3 SLR(1)分析技术.ppt
- 清华大学:《编译原理》课程教学资源_第六章 LR分析 6.1 概述 自下而上的语法分析 LR分析器 6.2 LR(0)分析.ppt
- 清华大学:《编译原理》课程教学资源_第六章 LR分析 6.4 LR(1)和LALR(1)分析规范LR分析.ppt
- 清华大学:《编译原理》课程教学资源_第九章 代码优化.ppt
- 清华大学:《编译原理》课程教学资源_第五章 LL(1)文法及其分析程序.ppt
- 清华大学:《编译原理》课程教学资源_第二章 PL/0编译程序.ppt
- 清华大学:《编译原理》课程教学资源_第十章 代码生成.ppt
- 《数据结构》课程教学资源:第十一章 内排序.ppt
- 《数据结构》课程教学资源:第十章 查找.ppt
- 《数据结构》课程教学资源:第四章 串.ppt
- 郑州大学远程教育学院:《汇编语言》课程电子教案(PPT课件)第一章 概述.ppt
- 郑州大学远程教育学院:《汇编语言》课程电子教案(PPT课件)第二章 8086的指念系统.ppt
- 郑州大学远程教育学院:《汇编语言》课程电子教案(PPT课件)第三章 汇编语言程序格式.ppt
- 郑州大学远程教育学院:《汇编语言》课程电子教案(PPT课件)第四章 基本汇编语言程序设.ppt
- 郑州大学远程教育学院:《汇编语言》课程电子教案(PPT课件)第五章 高级汇编语言程序设计.ppt
- 郑州大学远程教育学院:《汇编语言》课程电子教案(PPT课件)第六章 32位指令及其编程.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第一到第九章.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十章 存储过程与触发景.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十一章 游标.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十二章 安全管理.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十三章 数据备份与恢复.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十四章 数据庠复制.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十五章 数据转换.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十六章 SQL Server数据的网页发布.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十七章 VB/ SQL Server应用程序开发.ppt
- 上海应用技术大学:《SQLServer 2000数据库应用技术》课程教学资源(PPT课件讲稿)第十八章 SQL Server应用实例.ppt
- 《Linux 基础及应用》 第十章 网络服务器.ppt