迭代法塔的问题,如果中国

迭代法塔的问题,如果中国

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

看递归解决方案。使用Perl语言完成了不到一分钟。

sub hanno_recursive {
my ($from, $to, $reserve, $n) =  @_;
if (1 == $n) {
print “move $n from $from to $to\n”;
return;
}

hanno_recursive($from, $reserve, $to, $n -1);
print “move $n from $from to $to\n”;
hanno_recursive($reserve, $to, $from, $n -1);
}

极其简洁优美。充分体现了递归的优雅。

接下来。考虑迭代解法。考虑将问题分解为树结构。非常显然, 将A   B  C看成一个圈, 则左右子树具有某种对称。即顺时针或逆时针旋转。

这样。我们全然能够通过左树求得右树, 问题变成为了线性递归, 这个非常easy转换为迭代。

原理知道了, 写这个代码,还是比較费劲, 花了1个小时才调好。

sub hanno_iterate {
my ($from, $to, $reserve, $n) =  @_;
my @left = ();
my @right = ();
#move to leaf node
my $count = $n;
while ($count > 1) {
my $tmp = $to;
$to = $reserve;
$reserve = $tmp;
$count–;
}

for (my $index = 1; $index <= $n; $index++) {
my $new = “move $index from $from to $to\n”;

push @left, $new;
while ($new = shift @right) {
push @left, $new;
}
last if ($index == $n);

if (($index % 2) == ($n % 2)){
# anti-clock $from -> $to, $reserve->$from, $to -> $reserve
foreach my $opt(@left) {
my $left_value = “$opt”;
$left_value =~ tr/ABC/CAB/;
push @right, $left_value;
}
} else {
# clock $from -> $reserve, $reserve->$to, $to -> $from
foreach my $opt(@left) {
my $left_value = “$opt”;
$left_value =~ tr/ABC/BCA/;
push @right, $left_value;
}
}
my $tmp = $to;
$to = $reserve;
$reserve = $tmp;
}

foreach my $opt(@left) {
print $opt;
}

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117628.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring aop用法_概念的种类

    spring aop用法_概念的种类SpringAOP入门——概念及注意点

    2022年8月11日
    3
  • rviz的简单使用[通俗易懂]

    rviz的简单使用[通俗易懂]原链接:http://community.bwbot.orgrviz是ros自带的一个图形化工具,可以方便的对ros的程序进行图形化操作。其使用也是比较简单。整体界面如下图所示界面主要分为左侧的显示设置区域,中间的大的显示区域和右侧的视角设置区域。最上面是和导航相关的几个工具。最下面是ros状态相关的一些数据的显示。下面以用rviz查看ORB_SLAM2的topic数据为例展示一下rvi

    2022年4月20日
    143
  • 8000401a错误解决方式(Excel)

    8000401a错误解决方式(Excel)前一阵子做开发须要用到Excel和Word编程,本人用的是Vista系统,开发环境是VS2005和Office2007,測试无不论什么问题,但是到部署的时候出现了一些令人非常头痛的问题,老是会出现比如:检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现下面错误:8000401a。的错误,在网上查…

    2022年7月25日
    8
  • .net 常用开源框架

    .net 常用开源框架Json.NETCodePlexArchiveJson.Net是一个读写Json效率比较高的.Net框架.Json.Net使得在.Net环境下使用Json更加简单。通过LinqToJSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换。Math.NETMath.NETMath.NET的目标是为提供一款自身包含清晰框架的符号运算和数学运算/科学运算,它是C#开发的开.

    2022年7月15日
    23
  • 虚拟机iso镜像文件在哪_虚拟机系统镜像下载

    虚拟机iso镜像文件在哪_虚拟机系统镜像下载虚拟机windowsxpsp3原版原版的镜像:http://www.7xdown.com/Download.asp?ID=3319&amp;URL=http://d5.7xdown.com/soft2/&amp;file=WindowsXP-SP3-VOLMSDN.rar,直接复制进迅雷下载就可以。序列号:MRX3F-47B9T-2487J-KWKMF-RPWBY,激活密钥:MRX3F-4…

    2022年8月16日
    4
  • 检索com类工厂中的组件失败_检索com类工厂的组件失败

    检索com类工厂中的组件失败_检索com类工厂的组件失败出现以下错误:检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件失败,原因是出现以下错误:8000401a因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。(异常来自HRESULT:0x8000401A)。解决方案:1.开始-dcomcnfg,启动组件服务。2.找到Micro

    2022年8月22日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号