欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

递归的(个人)超详细讲解

程序员文章站 2022-05-08 22:18:33
...

递归

理解递归:

1.调用自己本身

2.有一个趋近与终止的条件

图解看20201014

个人注意事项:

不要尝试展开代码

思考递归:横向思考

代码执行:纵向执行

把大事化小事,但是大事和小事处理的方式是一样的

栈里面放数据,先进后出

示例

//按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)           递归求解
public class TestDemo01 {
    public static void main(String[] args) {
        int a=1234;
        print(a);
    }
    public  static void print(int n){
        if (n<=9){
            System.out.print(n);
            return;
        }
        print(n/10);
        System.out.print(n%10);
    }
}
//青蛙跳台阶问题
// 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法
public class TestDemo07 {
    public static void main(String[] args) {
        int n =4;
        System.out.println(norSum(n));
//        System.out.println(addSumN(n));
    }
//    public static int addSum(int n){
//        if (n==1){
//           return 1;
//        }
//        if (n==2){
//            return 2;
//        }
//        return addSum(n-1)+addSum(n-2);//类似斐波那契
//    }
//    public static int addSumN(int n){//可以跳n级(变态跳)
//        if (n==1){
//            return 1;
//        }
//        return 2*addSumN(n-1);
//    }
    public static int norSum(int n){//非递归
        if(n==1||n==2){
            return n;
        }
        int f1=1;
        int f2=2;
        int f3=0;
        for (int i = 3; i <=n; i++) {
                f3=f1+f2;
                f1=f2;
                f2=f3;
            }
        return f3;
    }
}
//递归求解汉诺塔问题
public class TestDemo08 {
    public static void main(String[] args) {
        hanoiTower(3,'A','B','C');
    }
    public static void move(char x,char y){
        System.out.print(x+"->"+y+"\t");
    }
    /**
     *
     * @param n 盘子的数量
     * @param a 盘子的现在位置
     * @param b 中转的位置
     * @param c 终点位置
     */
    public static  void hanoiTower(int n, char a,char b,char c){
        if (n == 1) {
            move(a,c);
            return;
        }
        hanoiTower(n-1,a,c,b);
        move(a,c);
        hanoiTower(n-1,b,a,c);
    }
}
相关标签: 递归法