一步一步写算法(之爬楼梯).docVIP

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

一步一步写算法(之爬楼梯) 前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以自己先考虑一下: 这个人爬n层楼梯,那么它也不是一下子就可以爬这么高的,他只有两个选择,要么从n-2层爬过来,要么从n-1层爬过来。除此之外,他没有别的选择。此时相信朋友其实已经早看出来了,这就是一道基本的递归题目。 (1)首先我们建立一个函数,判断函数的合法性 [cpp] view plaincopy void jump_ladder int layer, int* stack, int* top if layer 0 return; return; (2)判断当前的层数是为1或者是否为2[cpp] view plaincopy void jump_ladder int layer, int* stack, int* top if layer 0 return; if layer 1 printf_layer_one layer, stack, top ; return; if layer 2 printf_layer_two layer, stack, top ; return; return; (3)对于2中提及的打印函数进行设计,代码补全[cpp] view plaincopy #define GENERAL_PRINT_MESSAGE x \ do \ printf #x ;\ for index *top - 1 ; index 0; index -- \ printf %d, stack[index] ;\ printf \n ;\ while 0 void printf_layer_one int layer, int* stack, int* top int index ; GENERAL_PRINT_MESSAGE 1 ; void printf_layer_two int layer, int* stack, int* top int index; GENERAL_PRINT_MESSAGE 11 ; GENERAL_PRINT_MESSAGE 2 ; 注: a)代码中我们使用了宏,注意这是一个do while 0 的结构,同时我们对x进行了字符串强转 b)当剩下台阶为2的时候,此时有两种情形,要么一次跳完;要么分两次 (4)当阶梯不为1或者2的时候,此时需要递归处理 [cpp] view plaincopy void _jump_ladder int layer, int* stack, int* top, int decrease stack[ *top ++] decrease; jump_ladder layer, stack, top ; stack[-- *top ] 0; void jump_ladder int layer, int* stack, int* top if layer 0 return; if layer 1 printf_layer_one layer, stack, top ; return; if layer 2 printf_layer_two layer, stack, top ; return; _jump_ladder layer- 1, stack, top, 1 ; _jump_ladder layer- 2, stack, top, 2 ; 祝:这里在函数的结尾添加了一个函数,主要是递归的时候需要向堆栈中保存一些数据,为了代码简练,我们重新定义了一个函数。 总结: 1)这道题目和斐波那契数列十分类似,是一道地地道道的递归题目 2)递归的函数也需要好好测试,使用不当,极容易堆栈溢出或者死循环。对此,我们可以按照参数从小到大的顺序依次测试,比如说,可以测试楼梯为1、2、3的时候应该怎么运行,同时手算和程序相结合,不断修正代码,完善代码。 软件英才网 软件行业驰名招聘网站 有需要请联系我们

文档评论(0)

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

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

1亿VIP精品文档

相关文档