数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)

 /// <summary>
        /// 模拟 递归函数的调用堆栈
        /// </summary>
        /// <param name="n"></param>
        private void GoHonoi(int n)
        {
            Step sp = new Step(n,'A','B','C');
            //用栈来模拟系统的 递归调用栈
            LinkStack ls = new LinkStack();
            int count = 0;
            //相当于调用 Honoi(n,'A','B','C');
            ls.Push(sp);
            while(!ls.Empty())
            {
                Step topStep = (Step)ls.Top();
                while (topStep.n > 1)
                {
                    //将 Honoi(n-1...)压栈
                    ls.Push(new Step(topStep.n-1,topStep.A,topStep.C,topStep.B));
                    topStep = (Step)ls.Top();
                }
                //至此,honoi(n..) 的 递归函数均入栈
                if (topStep.n == 1)
                {
                    textBox3.AppendText(string.Format("{3}:移动 {2} 盘, {0} 到 {1}\n", topStep.A, topStep.C,1,++count));
                    ls.Pop();
                    topStep = (Step)ls.Top();
                }
                //如果栈不为空
                if (!ls.Empty())
                {
                    textBox3.AppendText(string.Format("{3}:移动 {2} 盘, {0} 到 {1}\n", topStep.A, topStep.C, topStep.n, ++count));
                    ls.Pop();
                    ls.Push(new Step(topStep.n - 1, topStep.B , topStep.A, topStep.C));
                    topStep = (Step)ls.Top();
                }

            }



        }


第一次调用GoHonoi(n)

转载于:https://www.cnblogs.com/tinyjian/p/6550709.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值