递归小结

简介: 递归小结

找重复:

  1. 找到一种划分方法
  2. 找到递推公式或者等价转换 都是父问题转换为求解子问题,其中会有变化的量
  3. 子问题和父问题有一样的表现形式

找变换的量

  1. 变化的量通常要作为参数

找参照

  1. 找到相对参照,有些题中参照物是不断变化的,因此传入的参数也要改变顺序

找出口

(所有的循环都可以改成递归,因为循环都是重复)


汉诺塔,将1-N从A移动到B,c可以作为中转:

  1. 1~N-1移动到c,b为辅助
  2. 把N移动到B
  3. 把1~N-1 从c移动到B,A为辅助
/**
 * 汉诺塔递归解法
 */
public class 汉诺塔游戏 {
  public static void main(String[] args) {
    printHanoiTower(3, "A", "B", "C");
  }
  /**
   * 将N个盘子的路径的打印
   *
   * @param N      初始的N个从小到达的盘子,N是最大编号
   * @param from 原始柱子
   * @param to 辅助的柱子
   * @param help   目标柱子
   */
  static void printHanoiTower(int N, String from, String to, String help) {
    if (N == 1) {
      System.out.println("move " + N + " from " + from + " to " + to);
      return;
    }
    printHanoiTower(N - 1, from, help, to); // 先把前N-1个盘子挪到辅助空间上去
    System.out.println("move " + N + " from " + from + " to " + to);  // N可以顺利到达target
    printHanoiTower(N - 1, help, to, from); // 让N-1从辅助空间回到源空间上去
  }
}
相关文章
|
4月前
|
算法 C语言
c递归
c递归
36 2
|
4月前
递归详解~
递归详解~
39 0
|
4月前
|
算法 C#
C#递归详解
C#递归详解
29 0
|
10月前
|
存储
【递归知识+练习】
【递归知识+练习】
63 0
|
Java 数据安全/隐私保护 决策智能
字符串全排列(递归)
字符串全排列,递归的应用
133 0
|
算法 Python
递归的使用
递归的使用
47 0
|
存储 Serverless 开发者
递归的理解与实现
递归的理解与实现
递归的理解与实现
|
机器学习/深度学习
简单的了解一下递归
在编程中,递归大家肯定都不陌生了吧,今天我们来总结总结有关于递归的东西。