当前位置: 首页 > news >正文

C# 使用递归方法实现汉诺塔步数计算

C# 使用递归方法实现汉诺塔步数计算

  • Part 1 什么是递归
  • Part 2 汉诺塔
  • Part 3 程序

Part 1 什么是递归

举一个例子:计算从 1 到 x 的总和

public int SumFrom1ToX(int x)
{if(x == 1){return 1;}else{int result = x + SumFrom1ToX_2(x - 1);  // 调用自己return result;}
}

Part 2 汉诺塔

有三个石柱,在最左侧的石柱上从小到大摆放 N 层盘片,需要从最左侧的石柱移动到最右侧的石柱上,中间的石柱作为缓冲,一次只能移动一个盘片,且无论何时较小的盘片始终在较大的盘片上面。
这个问题求解这过程中搬运的次数

Part 3 程序

创建一个Move函数来移动盘子

static void Move(int pile, char src, char temp, char dst)
{}

pile 是最左侧的盘片数量,src 是起始点,temp 是中间的缓冲区,dst 是终点

Move(pile - 1, src, dst, temp); // 将pile-1层盘片从src经过dst移动到temp
Move(1, src, temp, dst); // 将最底层的盘片从src移动到dst
Move(pile - 1, tmp, src, dst); // 将pile-1层汉诺塔从temp经过src移动到dst

Move 方法的代码

static void Move(int pile, char src, char temp, char dst)
{if (pile == 1){Console.WriteLine($"{src} --> {dst}");steps++;return;}Move(pile - 1, src, dst, temp);Move(1, src, temp, dst);Move(pile - 1, temp, src, dst);
}

完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;namespace ConsoleHelloWorld
{class Hanoi{public static int steps = 0;public void ShowHanoiPath(int levels){Console.WriteLine("输入的汉诺塔层数是:{0}", levels);Move(levels, 'A', 'B', 'C');Console.WriteLine("一共移动了{0}次", steps);}static void Move(int pile, char src, char temp, char dst){if (pile == 1){Console.WriteLine($"{src} --> {dst}");steps++;return;}Move(pile - 1, src, dst, temp);Move(1, src, temp, dst);Move(pile - 1, temp, src, dst);}}class Program{static void Main(string[] args){Hanoi hanoi = new Hanoi();hanoi.ShowHanoiPath(4);}}
}

在这里插入图片描述

http://www.lryc.cn/news/134140.html

相关文章:

  • 窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器
  • 健康检测智能睡眠床垫方案
  • 计网第三章(数据链路层)(五)
  • 嵌入式系统中常见内存的划分方法
  • 深入理解与实现:常见搜索算法的Java示例
  • PHP自己的框架实现操作成功失败跳转(完善篇四)
  • 【汇编语言】CS、IP寄存器
  • Nvidia Jetson 编解码开发(3)解决H265解码报错“PPS id out of range”
  • Angular中如何获取URL参数?
  • uniapp编写微信小程序和H5遇到的坑总结
  • 课程表-广度优先和图
  • 机器学习|决策树:数学原理及代码解析
  • 1.0的星火2.0必将燎原——图文声影PPT全测试
  • [MySQL]主从服务器布置
  • 图像处理算法大全(基于libyuv或IPP)----NV12转成I420,RGB24,ARGB集合
  • 机器人操作系统:ROS2 仿真入门
  • 面试题:线程池的底层工作原理
  • Excel/PowerPoint条形图改变顺序
  • 【操作系统】虚拟内存相关分段分页页面置换算法
  • Unrecognized Hadoop major version number: 3.0.0-cdh6.3.2
  • 机器学习分类,损失函数中为什么要用Log,机器学习的应用
  • PySpark安装及WordCount实现(基于Ubuntu)
  • SpringBoot 模板模式实现优惠券逻辑
  • 并查集 rank 的优化(Java 实例代码)
  • TDA4超级玩家浮出水面,行泊一体功能、成本刷到极致
  • 3分钟了解Android中稳定性测试
  • LVS-DR+keepalived实现高可用负载群集
  • 阿里云国际版注册教程
  • 基于百度文心大模型创作的实践与谈论
  • Java基础知识题(五)