网站大量收购闲置独家精品文档,联系QQ:2885784924

C++编程递归算法举例-[下楼-跳马-分书].pptVIP

C++编程递归算法举例-[下楼-跳马-分书].ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

**第九章

递归思想与相应算法*9.2递归算法举例

——下楼问题*任务:从楼上走到楼下共有h个台阶,每一步有三种走法走一个台阶;走二个台阶;走三个台阶。问:一共可以走出多少种方案?即共要多少步?每一步走几级台阶?希望用递归思想来编程。**思路:1、用枚举的方法,每一步都要试不同的步数j。j或者是为1,或是为2,或是为3。这可用for循环结构来实现。2、试着一步一步地走,从高到低,让变量i先取h值(即台阶数)。从楼上走到楼下,每走一步i的值会减去每一步所走的台阶数j。开始时,i=h(初值),以后i=i-j,(j=1,2,3)。当i=0时,剩余台阶数为0,这说明已走到楼下。3、每一步走法策略都相同,故可以用递归算法。*定义:Try(i,s)——站在第i级台阶上往下试走第s步的过程j=1,2,3——在每一步可以试着走的台阶数ji——说明第i级台阶已比要走的j级台阶小,j不可取,什么也不做ji——说明站在第i级台阶上可试走j个台阶为一步j==i——说明这一步走完后,就到楼下了。这时,一条下楼方案已试成,即可输出这一方案了*算法思路的与或图take[s]——存储第s步走过的台阶数*在上图中,A结点是被递归调用的结点,形式参数为i,s,A结点为一个与结点,进入B结点的参数为i,s,j=3;进入C结点的参数为i,s,j=2;进入D结点的参数为i,s,j=1。Lp是三个结点共用的循环体,是分支结构的或结点。*(1)当ij时,说明第i级已经比一步该走的台阶数小了。这是一个直接可解结点E,什么也不做。(2)当i=j时,要做相关联的G和H,G是直接可解结点,将第s步走过的台阶数j记入take数组,即take[s]=j;接着做H,H为或结点,有两个分支:其一是:当i==j时,说明经过第s步,已走到楼下,将方案号加1,输出该下楼行走方案;其二是:当ij时,说明经过第s步,尚未走到楼下,尚需再试第s+1步的走法,注意这时站在第i-j级台阶上。因此要调用Try(i–j,s+1)。take[s]——存储第s步走过的台阶数*take[s]——存储第s步走过的台阶数*//***************************************//*程序:6_8.cpp*//*作者:wuwh*//*编制时间:2002年11月04日*//*主要功能:下楼问题*//****************************************#includeiostream //coutusingnamespacestd;//定义全局变量:数组take,方案数numinttake[99]; intnum=0;*voidTry(inti,ints){//还有i级台阶,从第s步开始

for(intj=3;j0;j--){

if(i=j){

take[s]=j; //记录第s步走j个台阶

if(i==j){ //如果已经到了楼下 num++; //则方案数加1

cout“方案“num”:”;

//输出此方案

for(intk=1;k=s;k++)

couttake[k];

coutendl;

}

else//尚未走到楼下

Try(i-j,s+1); //再试剩下的台阶

}//__if(i=j)__

}//__FOR_J__}//函数体结束*intmain(){

inth=0; //h是楼梯的台阶数

cout请输入楼梯台阶数:

cinh; //输入楼梯的台阶数

//从第h级,开始下第一步 Try(h,1); //输出总方案数 cout总方案数:

文档评论(0)

Alfred + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档