汉诺塔问题--递归求解

简介: 汉诺塔问题

题目

有三个柱子,第一个柱子上从下往上放置大小递减的圆盘,要把这些圆盘都移动到第三个柱子上去,但是==大的圆盘不能放在小的圆盘上面==,可借助中间柱子的帮助解决。

分析

A,B,C代指三个柱子,要把A上的全部移动到C去。
假设第一个柱子上有n个圆盘,那就要把第一个柱子上n-1个圆盘都移走,才能拿到最后一个并把其放到第三个柱子上。但是这么想还是不懂,==假设n=1,那就直接A移动到C上去,==,假设n=2,先移动一个到中间柱子上,又会演变成n=1的情况,n=1可以作为递归跳出的条件,其他的就往这个地方递归。

==先从小问题上入手,在推广到大问题上去==

代码

package com.bilibili;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/7 15:19
 */
public class Main {
   

    public static void main(String[] args) {
   

        hanoi('A','B','C',4);

    }

    /**
     * 汉诺塔问题,将N片圆盘从A移动到C
     * 柱子角色不断互换
     */


    public static void hanoi(char a,char b,char c,int n){
   
        if (n == 1) {
   
            System.out.println(a + "---->" + c);
        } else {
   
            //c作为中间载体,先把压在a上的n-1圆盘移除
            hanoi(a, c, b, n -1);

            System.out.println(a + "---->" + c);

            //现在把原来放在b上的n-1片放回到c去,通过a的帮助,
            hanoi(b, a, c, n -1);
        }
    }
}
目录
相关文章
素因子分解(递归求解)
素因子分解(递归求解)
131 0
|
6月前
|
算法 C语言
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
75 0
|
7月前
递归求解汉诺塔问题(超详解)
递归求解汉诺塔问题(超详解)
134 0
|
7月前
|
机器学习/深度学习
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
61 0
汉诺塔 递归问题
汉诺塔 递归问题
85 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
119 0
递归问题的实际运用:汉诺塔问题
|
C++ C语言
你是真的“C”——函数递归详解汉诺塔
利用函数递归手把手求解汉诺塔
110 0
你是真的“C”——函数递归详解汉诺塔
算法学习--递归斐波那契数
算法学习--递归斐波那契数