C和Python分别解决汉诺塔问题

一、原理分析

在这里插入图片描述

三个柱子依次为A、B、C。需要把所有圆盘从A移动至C。
过程分解:
①把上面n-1个圆盘全部从A移动至B。其中,A为起始柱,C为过渡(辅助)柱,B为目标柱。【调用一次hanoi函数】
②把最下面的圆盘从A移动至C。【直接print,无需调用函数】
③把位于B柱上的n-1个圆盘移动至C,此过程中A为过渡(辅助)柱。【调用一次hanoi函数】

二、C语言实现

代码如下(仅供参考):

#include<stdio.h>
void hanoi(int num,char A,char B,char C); //声明函数 
int num;
int count=0;

int main(void)
{
	printf("Please enter the number:\n");
	scanf("%d",&num);
	hanoi(num,'A','B','C');
	return 0;	
}

void hanoi(int num,char A,char B,char C) //第一个位置表示起始柱,第二个表示过渡柱,第三个表示目标柱 
{
    if (num == 1)    //只有一个圆盘的情况 
    {
        printf("第%d步,圆盘编号 %d : %c → %c\n",count+1,1,A,C);
        count += 1;
	} 
    else
    { 
        hanoi(num-1,A,C,B);  //上面n-1个圆盘全部从A移动到B,其中A为起始柱,C为过渡柱,B为目标柱 
        printf("第%d步,圆盘编号 %d : %c → %c\n",count+1,num,A,C); //最下面一个圆盘从A移动到C 
        count += 1;
        hanoi(num-1,B,A,C); //上面n-1个圆盘全部从B移动到C,其中B为起始柱,A为过渡柱,C为目标柱 
	} 
}

三、Python实现

原理完全相同,用Python语言再描述一遍。

代码如下(仅供参考):

count=0
def hanoi(n,A,B,C):
    global count
    if n == 1:
        print("第{}步, 圆盘编号 {} : {} → {}".format(count+1,1,A,C))
        count += 1
    else:
        hanoi(n-1,A,C,B)
        print("第{}步, 圆盘编号 {} : {} → {}".format(count+1,n,A,C))
        count += 1
        hanoi(n-1,B,A,C)   
print("Please enter the number")
n=int(input(""))
hanoi(n,"A","C","B")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值