- 1、本文档共137页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五讲--递推与递归
规律3:从下到上填充最右一列的元素。 h--,v不变,得到下一个要填充的位置; number++得到下一个要填充的数字; 自下而上填充n-1个位置。 1 2 3 4 5 6 7 8 9 10 11 16 15 14 13 12 20 19 18 17 for(i=0;in-1;i++) { a[h][v]=number; h--; number++; } 规律4:从右到左填充最上一行的元素。 h不变,v--,得到下一个要填充的位置; number++得到下一个要填充的数字; 自右而左填充n-1个位置。 1 2 3 4 5 6 7 8 9 10 11 16 15 14 13 12 20 19 18 17 for(i=0;in-1;i++) { a[h][v]=number; v--; number++; } 性质相同,规模更小的问题,如何处理? 思路分析4 最外层数字填充完成: 下一步? 下一步? 33 36 34 35 函数fill(int number,int begin,int n)表示对n×n的方阵填数。 左上角的坐标-----(begin,begin) 要填充初始数值----number; 最外层填充完成后,变成n-2×n-2方阵的填充,可调用函数自身完成:fill(number, v, n-2) 数字旋转方阵--思路分析5 数字旋转方阵---递归边界是0或1 N是偶数,如n=6时 6×6 4×4 2×2 N是奇数,如n=7时 7×7 5×5 3×3 1×1 #include stdio.h int a[100][100]; void fill(int number,int begin,int n) //生成数字旋转方阵 // number:开始数字,begin:开始位置,n:方阵大小 { int i, h=begin,v=begin; if(n==0) return; // 0 是递归边界 if(n==1) // 1 是递归边界 { a[begin][begin]=number; return; } for(i=0;in-1;i++) //左列 { a[h][v]=number; h++; number++; } for(i=0;in-1;i++) // 低行 { a[h][v]=number; v++; number++; } for(i=0;in-1;i++) // 右列 {a[h][v]=number; h--; number++; } for(i=0;in-1;i++) //顶行 { a[h][v]=number; v--; number++; } begin++; fill(number,begin,n-2); //递归调用内层 } void main() //数字旋转方阵 { int i,j,n; fill(1,0,6); //调用生成数字旋转方阵函数 n=6; for (i=0;in;i++) { for (j=0;jn;j++) printf(%6d,a[i][j]); printf(\n\n); } } 递归小结 递归:未知的推到已知的,再由此返回。 基本思想:将复杂的操作分解为若干重复的简单操作。 下课了。。。 休息一会儿。。。 * 快速排序的启示 例如:k=4,即要找第4小的元素,有什么发现? low==4 high==4 如何来判定? low==k high==k 30 12 62 25 80 38 50 42 70 16 key=30 16 12 62 high 70 42 50 38 80 25 low 30 快速排序的启示 如果k=2,怎么办? 在low位置之前的序列进行查找 性质相同但规模更小的问题,可递归求解 如何表示? 如果函数原型为 find(a[],L,r,k) 则递归调用形式为:find(a[],L,low-1,k) 30 12 62 25 80 38 50 42 70 16 16 12 62 high 70 42 50 38 80 25 low 30 快速排序的启示 如果k=7,又怎么办? 在low位置之后的序列进行查找 性质相同但规模更小的问题,可递归求解 如果函数原型为 find(a[],L,r,k),k=2时的递归调用形式为:
您可能关注的文档
- 第五章__曲线运动知识点总结.doc
- 第五章__审计证据.ppt
- 第五章3食品的毒理.ppt
- 第五章__食品粉碎机械与设备.ppt
- 第五章_微波元件2003.ppt
- 第五章、会计账簿.ppt
- 第五章 砌体工程tm.ppt
- 第五章+透镜及其应用+第2节+生活中的透镜(共21张PPT)长雅中学正式启用.ppt
- 第五章-发展与合作课件.ppt
- 第五章中国海洋运输货物保险条款1.ppt
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)