c++汉诺塔代码

1.介绍

汉诺塔(Tower of Hanoi)‌,又称河内塔,是一个源于‌印度古老传说的益智玩具。这个传说讲述了‌大梵天创造世界时,在三根‌金刚石柱子上摞着64片‌黄金圆盘,并要求将其按大小顺序重新摆放在另一根柱子上,规则是小圆盘不能放在大圆盘上面,且一次只能移动一个圆盘。汉诺塔不仅是一个玩具,更是一个经典的‌递归问题,其解决方案展示了递归思想的魅力。‌12

汉诺塔的玩法非常简单:有三根杆子A、B、C,A杆上有若干碟子,每次只能移动一个碟子,且小的碟子只能叠在大的碟子上面。目标是把所有碟子从A杆全部移到C杆上。这个过程中,B杆可以作为辅助,但需要遵循特定的规则和步骤。

汉诺塔问题的解决算法展示了递归思想的巧妙应用。解决汉诺塔问题的步骤数是2的n次方减1(n为盘子数量),对于64个盘子的汉诺塔,需要的移动次数是一个惊人的数字:18446744073709551615。这个数字展示了递归算法在处理这类问题时的效率和优雅。

此外,汉诺塔的玩法和规则也体现了逻辑思考和问题解决的能力。通过理解和应用汉诺塔的规则,人们可以在游戏中锻炼自己的逻辑思维和问题解决技巧。

总之,汉诺塔不仅是一个富有挑战性的益智游戏,更是一个展示递归思想和逻辑思考的经典案例。无论是作为玩具还是作为教学工具,汉诺塔都深受人们的喜爱和推崇。

2.分步代码演示

2.1.准备头文件、命名空间 

​#include<bits/stdc++.h>
using namespace std;

2.2变量、main函数设置

int n;
//dfs函数
int main(){
    cin>>n;
    dfs(n,'a','b','c');
    return 0;
}

2.3dfs函数设置

void dfs(int n,char a,char b,char c) {
    if(n==1){
        cout<<A<<"->"<<n<<"->"<<C<<endl;
        return;
    }
    dfs(n-1,a,c,b);
    cout<<a<<"->"<<n<<<"->"<<c<<endl;
    dfs(n-1,b,a,c);
}

3.最终代码

#include<iostream>
using namespace std;
void dfs(int n,char a,char b,char c) {
    if(n==1){
        cout<<a<<"->"<<n<<"->"<<b<<endl;
        return;
    }
    dfs(n-1,a,c,b);
    cout<<a<<"->"<<n<<"->"<<b<<endl;
    dfs(n-1,c,b,a);
}
int main(){
    int n;
    cin>>n;
    dfs(n,'a','b','c');
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值