汉诺塔的递归实现(附c++)

汉诺塔

汉诺塔是什么

汉诺塔是古印度时期.........64.....毁天灭地.....
玩法说明 :
1.有三根杆子
2.每次.............
的经典递归问题

汉诺塔为什么可以用递归实现


n阶汉诺塔的实现可以分为三步
先将A上的n-1个挪到B
再将A上剩下的哪一个挪到C
再将b上的n-1个挪到C



1.当有一个柱子时,直接由A挪到C

在这里插入图片描述

2.当有两个柱子时,先借助B把A最上面的柱子挪到B上,再把A上的大柱子挪到C上,最后把B上的柱子挪到C上。在这里插入图片描述



3.当有n个柱子时,可以参考1.2.步骤:在这里插入图片描述

一直重复要将A上的n-1个挪到B,就要先将A上的(n-1)-1个挪到C,就要先将…,(无限套娃),直到套的n-1-1…-1等于1时,挪n-1-1…-1也就完成了,挪n-1-1也就完成了,挪n-1个也就完成了,n阶汉诺塔的移动也就完成了~



#include<iostream>

using namespace std;

int H(int n,char A,char B,char C)//代表要将A全部挪到C(B(中间的)作为工具人)
{
 static int count=0;//计数器,
	if(n==1){
		cout << A << "->" << C << endl;
		count++;
		}
	else{
		H(n-1,A,C,B);//要想将n从A到C就得先将n-1从A到B
		cout << A << "->" << C << endl;//A上只剩最底下一个,挪到C
		H(n-1,B,A,C);//将B上的n-1个挪到C,A作为工具人
		}
		return 0;
}

int main()
{
	int n;
	char A='A', B='B', C='C';
	cin >> n;
	n=H(n,A,B,C);
	cout << n << endl;
	return 0;
}


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值