递归算法-汉诺塔问题

原创 2013年12月02日 21:01:36

          一直以来对递归讳莫如深,总是不太懂,现在慢慢的从简单的问题开始,解决问题。大二时候刘老师的算法分析学的很烂,记得第一章就有汉诺塔问题的描述。但是似懂非懂。只懂得过程,却不会写出算法安静

      当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。

          综上所述,除了只有一个盘子时不需要借助其他塔外,其余情况均一样(只是事件的复杂程度不一样)。

<span style="font-size:14px;">import java.util.Scanner;

public class hanoiQues {

    static int count = 0;// 移动累计次数count初始化

    public static void main(String[] args) {
        Scanner sin = new Scanner(System.in);
        System.out.println("请输入盘数!");
        int n = sin.nextInt();
        hanoiQues hanoi = new hanoiQues();
        hanoi.hanoi(n, 'A', 'B', 'C');
        System.out.println(count);

    }

    public void move(char origin, char destination) {
        System.out.println("Direction:" + origin + "-->" + destination);
        count++;
    }

    public void hanoi(int n, char origin, char assist, char destination) {

        if (n == 1) {
            move(origin, destination);

        } else {
            hanoi(n - 1, origin, destination, assist);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
            move(origin, destination); //将剩下的一个盘子移动到目的塔上
            hanoi(n - 1, assist, origin, destination);//最后将借用塔上的n-1个盘子移动到目的塔上

        }
    }
}</span>





简述P问题,NP问题,NPC问题以及NP Hard问题

发现我们经常谈到NP问题,NP完全问题,NP难问题,但是其实他们之间是有区别的。 1、P问题是指:一个问题可以找到一个能在多项式的时间里解决它的算法。也就是复杂度为O(1),O(log(n)),O(n...
  • John159151
  • John159151
  • 2015年10月11日 21:52
  • 1763

回溯算法--装载问题

回溯法 1、有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。 2、回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。...
  • sinat_24436879
  • sinat_24436879
  • 2015年04月10日 22:05
  • 2696

背包问题,硬币问题

至少有4种背包问题:1)01背包,
  • binling
  • binling
  • 2014年10月02日 14:36
  • 564

什么是P问题、NP问题和NPC问题

这或许是众多OIer最大的误区之一。     你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的N...
  • sinat_25357975
  • sinat_25357975
  • 2016年04月16日 12:00
  • 605

例题:装箱问题

问题描述 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有6个型号,它们的长度和宽度分别是1X1,2X2,3X3,4X4,5X5,6X6。这些产品通常使用一个6X6Xh的长方...
  • Coder__CS
  • Coder__CS
  • 2016年06月16日 11:21
  • 1335

5个经典的同步问题

1. 生产者-消费者问题 也叫缓存绑定问题(bounded- buffer),是一个经典的、多进程同步问题。即有两个进程:制造商和消费者,共享一个固定大小的缓存。制造商的工作是制造一段数据,放进...
  • Naruto_ahu
  • Naruto_ahu
  • 2013年03月14日 12:11
  • 9726

装箱问题(NP问题)

问题描述有n个物品,体积为 v[i],i = 1..n。 现在有若干同样的箱子,体积为C,C > v[i], i = 1..n。问最少需要多少箱子,才能装下所有的物品。问题求解这类问题是NP问题,即可...
  • nisxiya
  • nisxiya
  • 2015年05月06日 11:30
  • 2182

第1章 统计学习方法概论——第8~10节 分类、标注、回归问题

关于统计学习方法的知识,参考书《统计学习方法》,李航著,清华大学出版社。 第一章 统计学习方法概论 第8~10节 分类、标注、回归问题 一、回...
  • l281865263
  • l281865263
  • 2015年03月25日 14:59
  • 712

SVM中原始问题与对偶问题的理解

1. 支持向量机的目的是什么? 对于用于分类的支持向量机来说,给定一个包含正例和反例(正样本点和负样本点)的样本集合,支持向量机的目的是寻找一个超平面来对样本进行分割,把样本中的正例和反例用超平...
  • chengleisheng
  • chengleisheng
  • 2014年11月05日 13:58
  • 3339

机器学习----SVM(2)从原始问题到对偶问题的转换

SVM的水真是太深了,只能一点一点的解决了,今天这篇博客简单讲解SVM的目标函数从原始问题到对偶问题的转换。在这里再给大家一个大牛的博客链接:http://blog.pluskid.org/?p=68...
  • Sunshine_in_Moon
  • Sunshine_in_Moon
  • 2016年05月05日 12:15
  • 6281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归算法-汉诺塔问题
举报原因:
原因补充:

(最多只允许输入30个字)