- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章递归与分策略
第二章 递归与分治策略 授课老师:李伟生 引言 递归的概念 分治法的基本思想 算法举例 二分搜索技术 棋盘覆盖 合并排序 快速排序 线形时间选择 循环赛日程表 引言 本章介绍算法的思想,原理,一般策略,实现方法,而引出递归算法,并介绍典型算例。 分治法:将大问题分割成规模较小的相同问题,分而治之。 一般策略:反复应用分治手段,使子问题与原问题类型一致而规模不断缩小。 实现方法:通常采用递归算法。 目的:设计程序简单,便于分析,有利于并行执行。 算法举例 2.1 递归的概念 递归调用:直接或间接地调用自身的算法。 递归函数:用函数自身给出定义的函数。 递归的优缺点: 优点:易于实现,便于分析。 不足:占用空间较多,在某些设计中可能会导致重复计算。 递归调用的一般条件:一般问题本身应具有递归特性,应具备递归结束的条件。 例:阶乘函数 N!= float fac(int n) { float f; if(n0)printf(n0,dataerror!); else if(n==0)f=1; else f=fac(n-1)*n; return(f); } 例: Fibonacci数列 F(n)= 求第n个Fibonacci数的算法描述 public static int fibonacci(int n) { if(n=1)return 1; return fibonacci(n-1)+fibonacci(n-2); } 例 :排列问题 R={r1,r2,···,rn}进行排列 Ri=R-{ri} perm(X)表示集合X的全排序,(ri)perm(X)是X全排序前加前缀ri 递归定义:设n是集合中元素个数 Perm(R)= public static void perm(Object[] list,int k,int m) { //产生list[k:m]的所有排列 if(k==m) { //单元素序列 for(int i=0;i=m;i++) system.out.print(list[i]); system.out.println(); } else //多元素排序,递归产生排列 for(int i=k;i=m;i++) { MyMath.swap(list,k,i); perm(list,k+1,m); MyMath.swap(list,k,i); } } 注: 1. perm(list,k,m)产生前缀是list[0:k-1],后缀是list[k:m]的全排序的所有排序。 2.调用perm(list,0,n-1)产生list[0:n-1]的全排序 3. 算法将list[k:m]中每一个元素分别与list[k]中的元素交换,递归产生list[k+1:m]的全排序,结果为list[0:k]的后缀。 例 Hanoi塔 a,b,c三个塔,a中有n个圆盘(由小到大叠放),从小到大编号为1,2,…,n 要求:将塔a上的盘移到塔c上,按原顺序叠放 规则:(1)每次只移一个圆盘 (2)不允许大盘压在小盘上 public static void hanoi(int n,int a,int b,int c) { if(n0) { hanoi(n-1,a,c,b); move(a,c); hanoi(n-1,b,a,c); } } . void move(char x,char y) { printf(%c--%c\n,x,y); } void hanoi(int n,char one,char two,char three) { if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } 注:递归函数中4个形参,完成n个盘从a塔借助b塔叠放到c塔 main() { int m; printf(input the mumber of diskes:); scanf(%d,m); printf(the step to moving %3d diskes:\n,m); ha
您可能关注的文档
最近下载
- 2022急诊胸痛心血管标志物联合检测专家共识(全文).pdf VIP
- 2025年四川高处安装、维护、拆除作业_特种作业证考试复习题库资料(含答案).pdf
- 临床医学专业水平测试评分表.pdf VIP
- 2024年四川省绵阳市中考化学真题卷(含答案与解析).pdf VIP
- 《三位数乘两位数》大单元教学设计 (1).docx VIP
- 2024年四川省绵阳市中考数学真题卷(含答案与解析).pdf VIP
- 生如夏花小清新模板(含音频+视频).pptx VIP
- 2024学年统编版高中语文选择性必修下册《客至》优质课一等奖课件28张.pptx
- Sysmex XN-1000全自动血液分析仪标准操作程序.pdf VIP
- 2025安全生产月主题宣讲课件.pptx
文档评论(0)