第五讲--递推与递归.ppt

  1. 1、本文档共137页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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时的递归调用形式为:

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档