java 算法 递归 汉诺塔(计算移动次数)

Posted //我是小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 算法 递归 汉诺塔(计算移动次数)相关的知识,希望对你有一定的参考价值。

汉诺塔

问题描述
汉诺塔大家都知道,现有三根柱子(A,B,C),在A柱上有n个圆盘,从小到大从上到下依次叠放,现在要求你计算出这n个圆盘从A盘移动到C盘最少需要多少步。

重温一下汉诺塔规则:
1,每次只能移动一个圆盘;
2,任何时刻都不能将一个较大的圆盘压在较小的圆盘之上;

import java.util.Scanner;

public class Main {
	static int count=0;//用于计数
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		f(sc.nextInt());
		System.out.println(count);
	}
	public static void f(int n) {
		if(n==1) {//出口,只剩一个圆盘时只需要再移动一步,然后return整个函数
			count++;
			return;
		}
		f(n-1);//把n-1个盘子移动到辅助柱
		count++;//把最下面最大的盘子移动到C柱,因为只有一步所以,步骤++
		f(n-1);把n-1个盘子移动到辅助柱
	}
}

以上是关于java 算法 递归 汉诺塔(计算移动次数)的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔问题的详解-附代码

汉诺塔的图解递归算法

汉诺塔算法

封闭形式的直接解

C++汉诺塔递归算法!入门者的必攻题,递归的核心思想!

面试高频题目--移动汉诺塔--递归与分治的运用