基础算法之三——递归法

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

题目描述

古代有一座汉诺塔,塔内有三个座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();
	}
}
posted @ 2018-01-27 18:29  tussuck  阅读(259)  评论(0编辑  收藏  举报