循环与递归.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
循环与递归.ppt

算法基本工具和优化技巧 计算机完成工作的实质是机械化的操作,而算法设计的目标是把人脑解决问题的想法规范化地描述成机械化操作。 计算机语言提供给算法的机械化操作:计算、I/O、流程控制、不同存储模式(变量、数组、结构体、文件等)。 本部分就是要讲解如何充分利用基本的机械化操作设计高质量的算法,在程序设计与算法设计之间起承上启下的作用。 循环与递归 将大量重复处理大量数据的步骤抽象成循环或递归模式,设计出可以针对不同规模解决问题的算法。 循环设计中要注意算法的效率 循环体的特点是:“以不变应万变”。 所谓“不变”是指循环体内运算的表现形式是不变的,而每次具体的执行内容却是不尽相同的。在循环体内用不变的运算表现形式去描述各种相似的重复运算。 【例1】求1/1!-1/3!+1/5!-1/7!+…+(-1)n+1/(2n-1)! 数学模型2:Sn=Sn-1+An; An=(-1)*An-1 *((2*n-2)*(2*n-1)) main( ) {int i,n, sign; float s,t=1; cinn; s=1; for(i=2;i=n;i++) { t= (-1)*t*(2*i-2)*(2*i-1)}; s=s+ 1/t; } cout“Sum=”s; } “自顶向下”的设计方法 【例2】编算法找出1000以内所有完数 例如,28的因子为1、2、4、7,14,而28=1+2+4+7+14。因此28是“完数”。编算法找出1000之内的所有完数,并按下面格式输出其因子:28 算法如下: 递归设计要点 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。 递归是一种比迭代循环更强、更好用的循环结构。 只需要找出递归关系和最小问题的解。 递归方法只需少量的步骤就可描述出解题过程所需要的多次重复计算,大大地减少了算法的代码量。 递归的关键在于找出递归方程式和递归终止条件。 递归定义:使问题向边界条件转化的规则。递归定义必须能使问题越来越简单。 递归边界条件:也就是所描述问题的最简单情况,它本身不再使用递归的定义。 【例】任给十进制的正整数,请从低位到高位逐位输出各位数字。 循环算法设计: f1(n) { while(n=10) { cout n %10; n=n/10;} coutn; } 递归算法设计: 1)同上,算法从低位到高位逐位求出各位数字并输出,求个位数字的算式为 n % 10,下一步则是递归地求n/10的个位数字。 2)当n10时,n为一位数停止递归。 递归算法如下: f2(n) {if(n10) coutn; else { cout n % 10; f(n/10);} } 【例】任给十进制的正整数,请从高位到低位逐位输出各位数字。 循环算法设计:本题目中要求“从高位到低位”逐位输出各位数字,但由于我们并不知道正整数的位数,算法还是“从低位到高位”逐位求出各位数字比较方便。这样就不能边计算边输出,而需要用数组保存计算的结果,最后倒着输出。 循环算法如下: f3(n) {int j,i=0,a[16]; while(n=10) { a[i]=n % 10; i=i+1; n=n/10;} a[i]=n; for(j=i;j=0;j--) coutn; } 递归算法设计: 与f2不同,递归算法是先递归地求n/10的个位数字,然后再求个位数字n的个位数字并输出。这样输出操作是在回溯时完成的。递归停止条件与f2相同为n10。 递归算法如下: f4(n) {if(n10) coutn; else { f(n/10); cout n %10; } } 例4排列问题 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。 分析:n=1 输出:r1 n=2 输出:r1r2 r2r1 n=3 输出:r1r2r3 r1r3r2 r2r1r3 r2r3r1 r3r1r2 r3r2r1 分析

文档评论(0)

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

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

1亿VIP精品文档

相关文档