汉诺塔问题(理解递归)

如果A上有一个或多个盘子,将该盘子全部移动到C上保持从下往上从大到小且在移动过程中盘子也要遵循该原则,总共有A,B,C三根柱子,该如何移动
在这里插入图片描述

  1. 1个盘子只需要A–>C
  2. 2个需要A–>B,A–>C,B–>C
  3. 3个及以上只需要三步把
    一、n-1个A–>B
    二、A–>C
    三、n-1个B–>C
    代码就可以这样写
#include<stdio.h>
void move(int n,char A,char B,char C)//从A-->C借助B 
{
	if(n==1) printf("%c-->%c\n",A,C);
	if(n>=2)
	{
		move(n-1,'A','C','B');
		printf("%c-->%c\n",A,C);
		move(n-1,'B','A','C');
	}
	
}
int main()
{
int n;
	printf("A盘上有几个盘子?请输入:");
	scanf("%d",&n);
	printf("移动的顺序为:\n");
	move(n,'A','B','C');
	return 0;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值