西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第六章 递归

递归的概念 DS ◆递归的定义若一个对象部分地包含它 计自己,或用它自已给自己定义,则称这个 算对象是递归的;若一个算法直接地或间 机接地调用自己,则称这个算法是递归的算 法。 ◆在以下三种情况下,常常用到递归方法 自 定义是递归的 教研室 数据结构是递归的 问题的解法是递归的
递归的概念 递归的定义 若一个对象部分地包含它 自己, 或用它自己给自己定义, 则称这个 对象是递归的;若一个算法直接地或间 接地调用自己, 则称这个算法是递归的算 法。 在以下三种情况下,常常用到递归方法。 ◼ 定义是递归的 ◼ 数据结构是递归的 ◼ 问题的解法是递归的 计 算 机 学 院 信 息 教 研 室 DS

递归函数的定义 DS 个算法可以分解成 计算机学院 若干相同的小算法 分解到某简单的子算法时终止 信◆有一个或几个终止条件 自 递归:由其前面的值求当前值 教研室 递归必须导致终止条件
计 算 机 学 院 信 息 教 研 室 DS 递归函数的定义 一个算法可以分解成 若干相同的小算法 分解到某简单的子算法时终止 有一个或几个终止条件 递归:由其前面的值求当前值 递归必须导致终止条件

定义是递归的 例如,阶乘函数 当n=0时 n*(n-1)!,当n≥1时 求解阶乘函数的递归犷法 long Factorial (long n) if(n==0)return 1; 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的 参数 计算 返回 0 0!=I 0 参数 计算 返回 1*Factorial(o) 1返 参数传递 参数 计算 返回 2 2*Factorial(1) 2 参数 计算 返 3 Factorial (2) 6 6值 参数 计算 返回 壬* Factorial(39) 24 24 主程序main
求解阶乘 n! 的过程

计算斐波那契数列的函数Fib(n)的定义 n=0.1 Fib(n) Fib(n-1)+Fib(n-2), n>1 求解斐波那契数列的递归η法 long Fib(long n)& if (n<=1 return n else return Fib (n-1)+ Fib(n-2);
计算斐波那契数列的函数Fib(n)的定义 求解斐波那契数列的递归算法 long Fib ( long n ) { if ( n <= 1 ) return n; else return Fib (n-1) + Fib (n-2); } − + − = = ( 1) ( 2), 1 , 0,1 ( ) Fib n Fib n n n n Fib n

数据结构是递归的 例如,单链表结构 f 搜索链表最后一个结点并打印其数值 template void Find( ListNode p if(p→next==NULL) cout<<p→data<<endl; else find(p→next);
数据结构是递归的 搜索链表最后一个结点并打印其数值 template void Find ( ListNode *p) { if ( p →next == NULL ) cout << p →data << endl; else Find ( p→next ); } 例如,单链表结构

在链表中寻找等于给定值的结点 并打印其数值 template void Print( ListNode P if(pl=NULL) if(p→data==x) cout<<p→data<<endl; else print(p→next)
在链表中寻找等于给定值的结点 并打印其数值 template void Print ( ListNode *p) { if ( p!= NULL) if ( p →data == x ) cout << p→data << endl; else Print ( p→next ); }

递归算法的设计 DS 计设计思想:分而治之 算机学院信息教研室 原问题 子问题 设计递归出口 最终可直接求解
递归算法的设计 设计思想:分而治之 原问题 子问题 最终可直接求解 计 算 机 学 院 信 息 教 研 室 DS 设计递归出口

问题的解法是递归的 例如,汉诺塔( Tower of hanoi)问题 B
问题的解法是递归的 例如,汉诺塔(Tower of Hanoi)问题

汉诺塔问题
汉诺塔问题 A B C
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第八章 图.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第五章 数组和串.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第二章 面向对象程序设计和算法性能分析.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第九章 排序.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第三章 顺序存储结构的表、堆栈和队列.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第七章 树和二叉树.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第一章 C++知识概要.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)广义表.ppt
- 西南科技大学:《数据结构》课程教学资源(教案讲义)课程案例设计.doc
- 西南科技大学:《数据结构》课程教学资源(教案讲义)理论课程教案(2005级计科).doc
- 西南科技大学:《数据结构》课程教学资源(教案讲义)课程教学资源(授课计划,主讲:朱战立、李学俊).doc
- 西南科技大学:《数据结构》课程教学资源(教案讲义)授课计划.doc
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)队列的表示和实现.ppt
- 西南科技大学:《数据结构》课程教学资源(教案讲义)2007数据结构试卷分析表.doc
- 西南科技大学:《数据结构》课程教学资源(教案讲义)课程教学大纲(主讲:朱战立、李学俊).doc
- 西南科技大学:《数据结构》课程教学资源(教案讲义)习题.doc
- 清华大学:《数据结构》课程教材PPT教学课件(C语言版)第九章 查找.ppt
- 清华大学:《数据结构》课程教材PPT教学课件(C语言版)第七章 图(7.4-7.7).ppt
- 清华大学:《数据结构》课程教材PPT教学课件(C语言版)第七章 图(7.1-7.3).ppt
- 清华大学:《数据结构》课程教材PPT教学课件(C语言版)第六章 树和二叉树(6-3)二叉树.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第十章 查找.ppt
- 西南科技大学:《数据结构》课程教学资源(PPT课件讲稿)第四章 链式存储结构的表、堆栈和队列.ppt
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第一章 C语言概述.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第二章 程序设计的灵魂——算法.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第三章 数据类型、运算符与表达式.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第四章 顺序结构程序设计.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第五章 选择结构程序设计.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第六章 循环结构程序设计.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第七章 数组.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第八章 函数.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第九章 预处理命令.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第十章 指针.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第十一章 结构体与共用体.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第十二章 位运算.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)第十三章 文件.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)前言(主编:刘迎春、张艳霞).pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)实验一 C语言程序上机步骤和C 语言程序基本结构.pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)实验十 函数(1/2).pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)实验十一 函数(2/2).pdf
- 《C语言程序设计》课程教材讲义(C语言程序设计上机指导与同步训练)实验十三 预处理命令和指针(1/2).pdf