递归小结

简介: 递归小结

找重复:

  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从辅助空间回到源空间上去
  }
}
相关文章
|
21天前
使用递归
【10月更文挑战第20天】使用递归。
17 8
|
18天前
递归
【10月更文挑战第23天】递归。
13 4
|
6月前
|
算法 C语言
c递归
c递归
42 2
|
存储
【递归知识+练习】
【递归知识+练习】
71 0
|
存储 算法 C++
递归的应用
递归的应用
|
Java 数据安全/隐私保护 决策智能
字符串全排列(递归)
字符串全排列,递归的应用
145 0
|
机器学习/深度学习
什么是递归
通过阶乘函数f(n)=n! f(0)=1 f(n)=f(n-1)*n(n>=1)简要理解递归
105 0
|
算法 索引
第 6 章 递归
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。
66 0