大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
#include <iostream>
using namespace std;
void move(int m,char a,char b);
void hanoi(int m,char one,char two,char three);
int main(){
hanoi(4,’A’,’B’,’C’);
return 0;
}
void move(int m,char a,char b){
cout<<m<<” from “<<a<<“—>”<<b<<endl;
}
//hanoi的函数说明,借助two这个柱子把盘子从one移动到three这根柱子上
void hanoi(int m,char one,char two,char three){
if(m==1){
move(m,one,three);//如果只有一个盘子,就直接从第1个位置移动到第3个
}else{
/*
如果需要移动的盘子m大于1个,思路是先把前m-1个盘子移动到中间的位置,然后再把第m个盘子移动到第三根柱子上
然后再借助第一根柱子把前m-1个盘子移动到第3根柱子上
*/
hanoi(m-1,one,three,two);
move(m,one,three);
hanoi(m-1,two,one,three);
}
}
其实递归的效率是非常低的,但是递归思路在解决某些问题的时候非常使用,主要体现在思路清晰,代码实现非常简单,困难是找到递归问题的结束点。
就拿汉罗塔问题来说,首先要移动第m个盘子,从A移动到C,必须先将前m-1个盘子从A移动到B,然后才能成功的把第m个盘子从A移动到C,第m个盘子成功的从A移动到C以后,剩下的有是一个m-1个盘子的汉罗塔问题,现在需求变成了需要把m-1个盘子从B借助A移动到C。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182863.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...