码迷,mamicode.com
首页 > 编程语言 > 详细

基础算法之三——递归法

时间:2018-01-27 20:25:00      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:can   str   直接   return   分解   code   system   大盘   思路   

基础算法之三——递归法“汉诺塔问题”

题目描述

古代有一座汉诺塔,塔内有三个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且在移动过程中,3个座上的盘子始终要保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。要求输出移动的步骤。

输入数据

汉诺塔内的盘子个数n。(1<n<64)

输出要求

输出移动的步骤,每行一步,如从A座移动到C座,输出“A->C”。

输入样例

3

输出样例

A->C

A->B

C->B

A->C

B->A

B->C

A->C


心得

用递归的思路来分析,最重要的是把原问题分解成一个或多个形式相同、但规模小一些的问题。把A座中的n个盘子通过B座中移动到C座,可以分成三个步骤:

1、把n-1个盘子借助C座,移到B座

2、把第n个盘放到C座上

3、把n-1个盘子借助A座,移到C座

解题思路:java描述

import java.util.Scanner;

public class QHanoi {
    public static void Hanoi(int n, char src, char mid, char desc){
        //n等于1时直接从src座移动到desc座
        if(n == 1){
            System.out.println(src + "->" + desc);
            return;
        }
        //步骤1
        Hanoi(n-1, src, desc, mid);
        //步骤2
        System.out.println(src + "->" + desc);
        //步骤3
        Hanoi(n-1, mid, src, desc);
        return;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //接收整型输入
        int n = scanner.nextInt();
        if (n >= 1 && n <= 64) {
            //赋值,开始换盘子
            QHanoi.Hanoi(n, ‘A‘, ‘B‘, ‘C‘);
        }
        scanner.close();
    }
}

基础算法之三——递归法

标签:can   str   直接   return   分解   code   system   大盘   思路   

原文地址:https://www.cnblogs.com/jztong/p/8366786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!