C语言——汉诺塔问题(递归)

问题描述:有三根直杆X,Y,Z。X杆上有n只盘子,每次移动一块盘子,小的只能叠在大的上面,将所有盘子从X经由Y杆全部移动到Z杆上。


#include<stdio.h>

void hanoi( int n , char x , char y , char z );
void move( char , char );
int main()
{
	int n;
	printf("请输入你的盘子数:");
	scanf("%d",&n);
	hanoi(n,'a','b','c');
	return 0;
}


void hanoi(int n,char x,char y,char z)
{
	if(n == 1)
		move( x , z );
	else
	{
		hanoi( n-1 , x , z , y );  //把n-1个盘子从x经由y移动到z。
		move( x , z );             //从x移动到z
		hanoi( n-1 , y , x , z );  //把n-1个盘子从y经由x移动到z。

	}
}


void move(char c1,char c2)
{
	printf("把%c移动到%c\n",c1,c2);
}

汉诺塔递归视频的讲解:https://share.weiyun.com/H3hxLBwE

代码其实很简洁,但递归调用的过程还是比较绕的。

想来想去,还是感觉以视频的方式表达的更清楚,我相信你们也是这么认为的,哈哈哈,有时间请耐心看看视频哦~~

哪里写的不好的还请多多批评指教,共同进步呀~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值