递归设计

本文探讨了递归设计的核心,包括停止条件和普适性解决方案,并通过迷宫问题和汉诺塔问题的具体案例,阐述了递归在解决问题中的应用。在迷宫问题中,通过设定终止条件和递归判断找到通路;在汉诺塔问题中,利用递归策略解决盘子的转移问题。
摘要由CSDN通过智能技术生成

递归设计的核心

递归设计的核心在于两点:

  1. 递归停止条件的判断
  2. 递归中对于问题的普适情况的解决方案

抓住这两点才能巧妙的解决问题。

递归问题的经典案例:

  1. 迷宫问题
  2. 汉诺塔问题

迷宫问题

假设有如下迷宫,其中1代表通路,0代表短路,请找出走出迷宫的道路。

1110110001111
1011101111001
0000101010100
1110111010111
1010000111001
1011111101111
1000000000000
1111111111111

解决问题的思路:

  1. 终止条件:
    如果所在格子是迷宫的最右下角,且该格子数值为1,那么迷宫走通,递归结束。

  2. 递归内容
    如果所在格子是迷宫的第m行,第n列,则进行如下判断

a. 如果该格子是在迷宫矩阵中,且数值为1,那么我们将齐标记为以判定格子(改写数值为3)
b. 然后分别判断该格子的上下左右相邻格子是否为通路
c. 如果相邻格子中有一个递归判断是通路,则当前格子在走出迷宫的道路上(改写数值为7)
d. 向上层返回对格子是否在通路上的判断

代码展示
Maze.java

package recurrence.maze;

public class Maze {
   

    public static int UNBLOCKED = 1;

    public static int TRIED = 3;

    public static int PATH = 7;

    public static int[][] MAZE = { { 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1 }, { 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1 },
            { 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0 }, { 1
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值