电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

一步一步写算法(之爬楼梯)VIP免费

一步一步写算法(之爬楼梯)_第1页
1/3
一步一步写算法(之爬楼梯)_第2页
2/3
一步一步写算法(之爬楼梯)_第3页
3/3
一步一步写算法(之爬楼梯)前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下:有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法?在揭晓答案之前,朋友们可以自己先考虑一下:这个人爬n层楼梯,那么它也不是一下子就可以爬这么高的,他只有两个选择,要么从n-2层爬过来,要么从n-1层爬过来。除此之外,他没有别的选择。此时相信朋友其实已经早看出来了,这就是一道基本的递归题目。(1)首先我们建立一个函数,判断函数的合法性1voidjump_ladder(intlayer,int*stack,int*top)2{3if(layer<=0)4return;56return;7}(2)判断当前的层数是为1或者是否为2[cpp]viewplaincopy8voidjump_ladder(intlayer,int*stack,int*top)9{10if(layer<=0)11return;1213if(layer==1){14printf_layer_one(layer,stack,top);15return;16}1718if(layer==2){19printf_layer_two(layer,stack,top);20return;21}2223return;24}25#defineGENERAL_PRINT_MESSAGE(x)\26do{\27printf(#x);\28for(index=(*top)-1;index>=0;index--)\29printf("%d",stack[index]);\30printf("\n");\31}while(0)3233voidprintf_layer_one(intlayer,int*stack,int*top)34{35intindex;36GENERAL_PRINT_MESSAGE(1);37}3839voidprintf_layer_two(intlayer,int*stack,int*top)40{41intindex;4243GENERAL_PRINT_MESSAGE(11);44GENERAL_PRINT_MESSAGE(2);45}注:a)代码中我们使用了宏,注意这是一个do{}while(0)的结构,同时我们对x进行了字符串强转b)当剩下台阶为2的时候,此时有两种情形,要么一次跳完;要么分两次(4)当阶梯不为1或者2的时候,此时需要递归处理46void_jump_ladder(intlayer,int*stack,int*top,intdecrease)47{48stack[(*top)++]=decrease;49jump_ladder(layer,stack,top);50stack[--(*top)]=0;51}5253voidjump_ladder(intlayer,int*stack,int*top)54{55if(layer<=0)56return;5758if(layer==1){59printf_layer_one(layer,stack,top);60return;61}6263if(layer==2){64printf_layer_two(layer,stack,top);65return;66}6768_jump_ladder(layer-1,stack,top,1);69_jump_ladder(layer-2,stack,top,2);70}祝:这里在函数的结尾添加了一个函数,主要是递归的时候需要向堆栈中保存一些数据,为了代码简练,我们重新定义了一个函数。总结:1)这道题目和斐波那契数列十分类似,是一道地地道道的递归题目2)递归的函数也需要好好测试,使用不当,极容易堆栈溢出或者死循环。对此,我们可以按照参数从小到大的顺序依次测试,比如说,可以测试楼梯为1、2、3的时候应该怎么运行,同时手算和程序相结合,不断修正代码,完善代码。1

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

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

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部