当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

西安石油大学:《数据结构》精品课程资源(PPT教学课件)使用C语言(第4版)第06章 递归算法

资源类别:文库,文档格式:PPT,文档页数:42,文件大小:483KB,团购合买
6.1递归的概念 6.2递归算法的执行过程 6.3递归算法的设计方法 6.4递归过程和运行时栈 6.5递归算法的效率分析 6.6递归算法到非递归算法的转换 6.7设计举例
点击下载完整版文档(PPT)

61递归的概念 若一个算法直接的或间接的调用自己本身,则称这 个算法是递归算法。 存在算法调用自己的情况: (1)问题的定义是递推的 阶乘函数的常见定义是 M= 二 X(x-1x…×1 当n>

2 存在算法调用自己的情况: 若一个算法直接的或间接的调用自己本身,则称这 个算法是递归算法。 (1)问题的定义是递推的 阶乘函数的常见定义是: 6.1递归的概念

也可定义为: 彐 = N|= 写成函数形式,则为 当当 时 时 这种函数定义的方法是用阶乘函数自己本身定义了阶 乘函数,称公式(6-3)是阶乘函数的递推完义式

3 也可定义为: 写成函数形式,则为: 这种函数定义的方法是用阶乘函数自己本身定义了阶 乘函数,称公式(6 – 3)是阶乘函数的递推定义式

(2)问题的解法存在自调 个典型的例子是在有序数组中查找一个数据元素是否 存在的折半查找算法

4 (2)问题的解法存在自调用 一个典型的例子是在有序数组中查找一个数据元素是否 存在的折半查找算法

下 元赤但 17 1 IAid 二次:下 元赤伯 mid Ia[ma] 界三:下坪 元但 萬=[m副 ber chaq

5

62递归算法的执行过程 例6-1给出按照公式6-3计算阶乘函数的递归算法 并给出n=3时递归算法的执行过程。 设计:按照公式6-3计算阶乘函数的递归算法如下:

6 6.2递归算法的执行过程 例6-1 给出按照公式6-3计算阶乘函数的递归算法, 并给出n = 3时递归算法的执行过程。 设计:按照公式6-3计算阶乘函数的递归算法如下:

long int Fact(int n) ntx: long int y if(n<0) /n<0时阶乘无定义 { printi(“参数错!"); return -1 if(n==O)return 1 else t y=Fact(n-1) 递归调用 return n * y;

7 long int Fact(int n) { int x; long int y; if(n < 0) //n < 0时阶乘无定义 { printf(“参数错!”); return -1; } if(n == 0) return 1; else { y = Fact(n - 1); //递归调用 return n * y; } }

设计主函数如下 void main(vo long int fn; fn=Fact(3); 主函数用实参=3调用了递归算法Fat(3),而 Fact(3)要通过调用Fact(2)、Fact(2)要通过调用Fact(1) Fact(1)要通过调用Fact(0来得出计算结果。Fac(3)的 递归调用过程如图6-2所示

8 设计主函数如下 void main(void) { long int fn; fn = Fact(3); } 主函数用实参n= 3调用了递归算法Fact(3),而 Fact(3)要通过调用Fact(2)、Fact(2)要通过调用Fact(1)、 Fact(1)要通过调用Fact(0)来得出计算结果。Fact(3)的 递归调用过程如图6-2所示

fact(3) fact fa ct fetus fact(e) fact(2) Fact(1) fect retum[3*y retum( 27) return(*) 图6-2Fact(3)的递归调用执行过程

9 图6-2 Fact(3)的递归调用执行过程

例6-2给出在有序数组a中查找数据元素x是否存在的 递归算法,并给出如图6-1所示实际数据的递归算法的 执行过程。递归算法如下:

10 例6-2 给出在有序数组a中查找数据元素x是否存在的 递归算法,并给出如图6-1所示实际数据的递归算法的 执行过程。递归算法如下:

int BSearch(int al int x, int low, int high) Int mi id if(low >high)return-1; 查找不成功 mid=(low t high)/2; if(x= amid) return mid;/查找成功 else if(x a midd return BSearch(a, x, low, mid-1); /在庄下半区查找 ese return bsearch(a,x,mid1,high);在上半区查找

11 int BSearch(int a[], int x, int low, int high) { int mid; if(low > high) return -1; //查找不成功 mid = (low + high) / 2; if(x == a[mid]) return mid; //查找成功 else if(x < a[mid]) return BSearch(a, x, low, mid-1); //在下半区查找 else return BSearch(a, x, mid+1, high); //在上半区查找 }

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共42页,可试读14页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有