收藏 分销(赏)

C++递归函数汉诺塔原理一步步详解.docx

上传人:s4****5z 文档编号:9007654 上传时间:2025-03-11 格式:DOCX 页数:3 大小:30.56KB
下载 相关 举报
C++递归函数汉诺塔原理一步步详解.docx_第1页
第1页 / 共3页
C++递归函数汉诺塔原理一步步详解.docx_第2页
第2页 / 共3页
点击查看更多>>
资源描述
有3个塔,每个都可以对方若干个盘子。开始时,所有盘子均在塔A上,应且,盘从上到下,按直径增大的次序放置(如图所示)。设计一个移动盘子的程序,使得塔A上的所有盘子借助于塔B移到塔C上,但有两个限制条件:一是一次只能搬到一个盘子,而是任何时候不能大盘子放在比它小的盘子的上面。 程序如下: #include<stdio.h>——————不解释 int step=0;—————————赋初值 move(int n,char a,char b,char c);——函数声明 main()——————————不解释 { int n;——————————不解释 scanf("%d",&n);——————不解释 printf("n=%d\n",n);—————不解释 move(n,'a','b','c');——————调用函数move return 0;—————————不解释 } move(int n,char a,char b,char c)————不解释 { if(n>0) { move(n-1,a,c,b); step++; printf("step%d:%c-->%c\n",step,a,c); move(n-1,b,a,c); } } 现在开始详解: 现在开始解释move在main函数的具体发挥。 设n=3只有3个盘子 move(int 3,char a,char b,char c) ————n=3 { if(3>0)————n变为3 { move(2,a,c,b);————n减1变为2 //////step++; printf("step%d:%c-->%c\n",step,a,c);\\\\\注意斜杠里是个整体,不是分开讨论的。 move(n-1,b,a,c); } 1,move(n,a ,b,c)表示讲n个盘子从A塔(借助于B塔)移到C塔。 所以move(3,a ,b,c)表示讲3个盘子从A塔(借助于B塔)移到C塔。 2,move(2,a,c,b):即讲2个盘子从A塔(借助于C塔)移到B塔。目的是让A塔上第3个盘子(最下面的盘子)上无其他盘子。 3,将底下的第3个盘子从A塔移到C塔。 4,move(2,b,a,c):即将2个叠放在B塔上的盘子(借助于A塔)移到C塔。 printf("step%d:%c-->%c\n",step,a,c)这个代码就是打印这里。 然后关键来了 move(2,b,a,c)就要调move(n,chara, charb, charc)函数了,这里请注意char a只是一个字符变量,就是一个只能赋值字符的变量,它现在对应的是b,同理charb对应a,charc对应a,这样下去就一目了然了
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服