中国药科大学:《数据结构》课程PPT教学课件(讲稿)第五章 递归与广义表的知识概念讲解

第五章递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表
◼ 递归的概念 ◼ 递归过程与递归工作栈 ◼ 递归与回溯 ◼ 广义表

递归的概念 递归的定义若一个对象部分地包含它 自己,或用它自己给自己定义,则称这 个对象是递归的;若一个过程直接地或 间接地调用自己则称这个过程是递归 的过程。 以下三种情况常常用到递归方法。 定义是递归的 数据结构是递归的 问题的解法是递归的
递归的概念 ◼ 递归的定义 若一个对象部分地包含它 自己, 或用它自己给自己定义, 则称这 个对象是递归的;若一个过程直接地或 间接地调用自己, 则称这个过程是递归 的过程。 ◼ 以下三种情况常常用到递归方法。 ◼ 定义是递归的 ◼ 数据结构是递归的 ◼ 问题的解法是递归的

定义是递归的 例如,阶乘函数 当n=0时 n*(n-1)!,当n≥1时 求解阶乘函数的递归算法 long Factorial long n)t if (n==0)return I else return n* Factorial (n-1)
定义是递归的 求解阶乘函数的递归算法 long Factorial ( long n ) { if ( n == 0 ) return 1; else return n * Factorial (n-1); } 例如,阶乘函数 − = = 当 时 当 时 ( 1)!, 1 1, 0 ! n n n n n

求解阶乘n!的过程 主程序main:fact(4) 参数4计算4*fact(3)返回24 递参 结回 归数二参数3计算3+f2)返回6果归 调传 返求 用递参数2计算2c(1)返回2回值 参数1计算1*ac0)返回1 参数0直接定值=1返回1
求解阶乘 n! 的过程 主程序 main : fact(4) 参数 4 计算 4*fact(3) 返回 24 参数 3 计算 3*fact(2) 返回 6 参数 2 计算 2*fact(1) 返回 2 参数 1 计算 1*fact(0) 返回 1 参数 0 直接定值 = 1 返回 1 参 数 传 递 结 果 返 回 递 归 调 用 回 归 求 值

数据结构是递归的 例如,单链表结构 ff 个结点,它的指针域为NULL,是 一个单链表; 个结点,它的指针域指向单链表, 仍是一个单链表
数据结构是递归的 ◼ 一个结点,它的指针域为NULL,是 一个单链表; ◼ 一个结点,它的指针域指向单链表, 仍是一个单链表。 例如,单链表结构 f f

搜索链表最后一个结点并打印其数值 template void Print( ListNode*)i if(f->ink=- NULL cout data link ) 递归找链尾 Lao+a+a3+an
搜索链表最后一个结点并打印其数值 template void Print ( ListNode *f ) { if ( f ->link == NULL ) cout data link ); } f f f f f a0 a1 a2 a3 a4 递归找链尾

在链表中寻找等于给定值的结点并打印 其数值 template void Print( ListNode*f, Type&x)t if(f= NULL if (f-> data ==X cout data link, x); 递归找含值的结点 f-十xA f f
在链表中寻找等于给定值的结点并打印 其数值 template void Print ( ListNode *f, Type& x ) { if ( f != NULL ) if ( f -> data == x ) cout data link, x ); } f f f f 递归找含x值的结点 x

问题的解法是递归的 例如,汉诺塔( Tower of hanoi)问题的解法: 如果n=1,则将这一个盘子直接从A柱 移到C柱上。否则,执行以下三步: ①用C柱做过渡,将A柱上的(n-1)个 盘子移到B柱上: ②将A柱上最后一个盘子直接移到C柱 上 ③用A柱做过渡,将B柱上的(m-1)个 盘子移到C柱上
问题的解法是递归的 例如,汉诺塔(Tower of Hanoi)问题的解法: 如果 n = 1,则将这一个盘子直接从 A 柱 移到 C 柱上。否则,执行以下三步: ① 用 C 柱做过渡,将 A 柱上的 (n-1) 个 盘子移到 B 柱上: ② 将 A 柱上最后一个盘子直接移到 C 柱 上; ③ 用 A 柱做过渡,将 B 柱上的 (n-1) 个 盘子移到 C 柱上

A B A B A B B

#include #include strclass. h void Hanoi (int n, String A, String B, String C)i /解决汉诺塔问题的算法 if(n-1) cout<<move<<a<<to <<C<< endl else( Hanoi(n-1,A, C,B); cout << move <<a<< to <<c << endl Hanoi(n-1,B,A,C);
#include #include "strclass.h” void Hanoi (int n, String A, String B, String C) { //解决汉诺塔问题的算法 if ( n == 1 ) cout << " move " << A << " to " << C << endl; else { Hanoi ( n-1, A, C, B ); cout << " move " << A << " to " << C << endl; Hanoi ( n-1, B, A, C ); } }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第四章 栈和队列的知识概论.ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第三章 链表之(单链表的类定义).ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第二章 数组的定义和初始化知识讲解.ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第十章 索引与散列结构知识讲解.ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第一章 绪论.ppt
- AUTO CAD205中文教程 教学课件讲解.ppt
- 微机原理、汇编语言与接口技术:第四章 机器语言、汇编语言与高级语言.ppt
- 微机原理、汇编语言与接口技术:第六章 总线的基本概念.ppt
- 微机原理、汇编语言与接口技术:第八章 中断技术、DMA控制器及定时器/计数器.ppt
- 微机原理、汇编语言与接口技术:第五章 存储系统及半导体存储器.ppt
- 微机原理、汇编语言与接口技术:第二章 微机原理与接口技术微处理器.ppt
- 微机原理、汇编语言与接口技术:第九章 数、模和数、数模转换.ppt
- 微机原理、汇编语言与接口技术:第三章 微型计算机指令系统.ppt
- 微机原理、汇编语言与接口技术:第七章 输入输出总线接口技术.ppt
- 微机原理、汇编语言与接口技术:第一章 微型计算机的发展、应用及其分类.ppt
- 东北农业大学工程学院:《计算机集成制造技术》课程教学资源(PPT课件)计算机辅助制造概论.ppt
- 计算机应用基础_Killer Transitions README.rtf
- 计算机应用基础_KILLER Transitions Manual.rtf
- VISUAL C++ MFC 简明教程.doc
- 柳州师专电算中心《计算机应用基础》练习题集_封面.doc
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第六章 树与森林的概念讲解.ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第七章 集合与搜索的基本概念.ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第八章 图的基本概念的知识讲解.ppt
- 中国药科大学:《数据结构》课程PPT教学课件(讲稿)第九章 排序的基本概述.ppt
- 科学计算与 MATLAB语言——第一章 MATLAB概述与运算基础.pps
- 科学计算与 MATLAB语言——第二章 MATLAB程序设计.pps
- 科学计算与 MATLAB语言——第三章 Mat1ab的文件操作.pps
- 科学计算与 MATLAB语言——第四章 Matlab绘图功能.pps
- 科学计算与 MATLAB语言——第五章 MATLAB线性代数中的数值计算问题.pps
- 科学计算与 MATLAB语言——第六章数据处理方法与多项式.pps
- 科学计算与 MATLAB语言——第七章 MATLAB的符号计算.pps
- 科学计算与 MATLAB语言——第八章 MATLAB图形用 户界面设计.pps
- Linux实用教程——第一章 Linux的实用教程概况及安装.ppt
- Linux实用教程——第二章 Linux的常用命令.ppt
- Linux实用教程——第三章 Linux系统管理概述.ppt
- Linux实用教程——第四章 Linux网络基础.ppt
- Linux实用教程——第五章 Intranet服务器.ppt
- Linux实用教程——第六章 Internet应用服务器的配置.ppt
- Linux实用教程——第七章 Web应用服务.ppt
- Linux实用教程——第八章 Linux网络安全基础知识.ppt