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

本文通过三个经典的递归编程实例——打印数字每一位、青蛙跳台阶问题和汉诺塔问题,深入浅出地介绍了递归的概念和使用方法。递归编程的核心在于将复杂问题分解为简单的子问题,并确保存在终止条件。在执行过程中,栈的数据结构起到了关键作用。通过非递归解法展示了如何转换思维解决同一问题。
摘要由CSDN通过智能技术生成

递归

理解递归:

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值