栈与递归之汉诺塔C/C++代码实现

本文介绍了汉诺塔游戏的规则和递归解决方案,通过C/C++代码展示了如何实现汉诺塔的移动过程。利用分治思想,通过递归将A柱的n个圆盘移动到C柱,中间借助B柱。同时,文章还探讨了递归的工作栈,以阶乘为例展示了进栈和退栈的过程。
摘要由CSDN通过智能技术生成

1,汉诺塔

游戏规则:

将塔座A上的n个圆盘移至塔座C上,并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:
(1)每次只能移动一个圆盘;
(2)圆盘可以插在A、B和C中的任一塔座上;
(3)任何时刻都不能将一个较大的圆盘压在较 小的圆盘之上。
在这里插入图片描述

问题分析:

可以用分治思想来解决这个问题:
假如盘数为n,用C柱做过渡,将A柱上的n-1个盘子移到B柱上;再将A上最大的那个盘子移到C上,最后用A柱做过渡,把B上的n-1个盘子移到C上。

递归的结束条件是:
当n=1时,即只有一个盘子时,只需将编号为1的圆盘从塔座A直接移至塔座C上即可,下面代码用输出来代替移动。

代码如下:

#include<stdio.h>

void hanoi(int n, char x, char y, char z)
{
   
	if (n == 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值