北京南昌网站制作,下载安装app应用,一个网站做多少内链合适,名片模板归纳编程学习的感悟#xff0c; 记录奋斗路上的点滴#xff0c; 希望能帮到一样刻苦的你#xff01; 如有不足欢迎指正#xff01; 共同学习交流#xff01; #x1f30e;欢迎各位→点赞 #x1f44d; 收藏⭐ 留言#x1f4dd; 比别人多一点努力#xff0c;你…
归纳编程学习的感悟 记录奋斗路上的点滴 希望能帮到一样刻苦的你 如有不足欢迎指正 共同学习交流 欢迎各位→点赞 收藏⭐ 留言 比别人多一点努力你就会多一份成绩 引言 相传在古印度圣庙中有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上有三根杆(编号A、B、C)在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标把A杆上的金盘全部移到C杆上并仍保持原有顺序叠好。操作规则每次只能移动一个盘子并且在移动过程中三根杆上都始终保持大盘在下小盘在上操作过程中盘子可以置于A、B、C任一杆上。 一、分析 分析对于这样一个问题任何人都不可能直接写出移动盘子的每一步但我们可以利用下面的方法来解决。设移动盘子数为n为了将这n个盘子从A杆移动到C杆可以做以下三步
(1)以C盘为中介从A杆将1至n-1号盘移至B杆
(2)将A杆中剩下的第n号盘移至C杆
(3)以A杆为中介从B杆将1至n-1号盘移至C杆。 二、递归解决问题 这样问题解决了但实际操作中只有第二步可直接完成而第一、三步又成为移动的新问题。以上操作的实质是把移动n个盘子的问题转化为移动n-1个盘那一、三步如何解决事实上上述方法设盘子数为n, n可为任意数。该法同样适用于移动n-1个盘因此依据上法可解决n -1个盘子从A杆移到B杆(第一步)或从B杆移到C杆(第三步)问题。现在问题由移动n个盘子的操作转化为移动n-2个盘子的操作。依据该原理层层递推即可将原问题转化为解决移动n -2、n -3… … 3、2直到移动1个盘的操作而移动一个盘的操作是可以直接完成的。至此我们的任务算作是真正完成了。而这种由繁化简用简单的问题和已知的操作运算来解决复杂问题的方法就是递归法。在计算机设计语言中用递归法编写的程序就是递归程序。
三、代码附上
#includestdio.h
void move(char x,char y);
void honi(int n,char x,char y,char z);
int main(){int n;scanf(%d,n);honi(n,A,B,C);return 0;
}
void move(char x,char y){printf(%c--%c\n,x,y);
}
void honi(int n,char x,char y,char z){if(n1){move(x,z);}else{honi(n-1,x,z,y);move(x,z);honi(n-1,y,x,z);}
}
四、体验游戏
汉诺塔小游戏 (fuyeor.com)https://apps.fuyeor.com/zh-cn/games/hanoi/
五、总结 递归法,利用一个问题与其子问题的递推关系来解决问题通常把一个问题层层转化为一个原问题相同或相似的但规模较小的子问题来求解。 递归在解决某些问题时是一个非常有用的方法它可以使某些看起来不容易解决的问题变得容易解决写出程序也比较简洁。但是递归通常要花较多的机器时间和占用较多的储存空间。 最后希望本篇文章对你有所帮助也希望可以支持支持博主后续博主也会定期更新学习记录记录学习过程中的点点滴滴。若这篇文章中有哪些不正确的内容欢迎大家在评论区和我交流讨论