函数递归——汉诺塔问题

汉诺塔问题

在这里插入图片描述

汉诺塔问题是一个经典的数学问题,通常用来演示递归算法。问题的背景是:有三根杆子(A、B、C),在A杆上有N个大小不一的圆盘,要求将所有圆盘从A杆移动到C杆,遵循以下规则:

  • 一次只能移动一个圆盘。
  • 不能将较大的圆盘放在较小的圆盘上。
  • 可以使用B杆作为辅助杆。
    解决汉诺塔问题的基本思路是:将N-1个圆盘从A杆移动到B杆,然后将第N个圆盘从A杆移动到C杆,最后将B杆上的N-1个圆盘移动到C杆上。
    汉诺塔问题在C语言中是一个经典的函数递归问题
    我们可以在汉诺塔问题中发现规律:
    C语言代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void move(char pos1, char pos2)
{
	printf("%c->%c\n", pos1, pos2);
}
//N代表盘子的数量
//pos1:起始位置
//pos2:中转位置
//pos3:终止位置
void Hanio(int n,char pos1, char pos2, char pos3)
{
	if (n == 1) 
	{
		move(pos1, pos2);
	}
	else
	{
		Hanio(n - 1, pos1, pos3, pos2);
		move(pos1, pos2);
		Hanio(n - 1, pos2, pos1, pos3);
	}
}
int main()
{
	Hanio(2, 'A', 'B','C');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值