【递归知识+练习】

文章目录


递归

递归的概念

一个方法在执行过程中调用自身, 就称为 "递归"。

递归的必要条件:

  1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
  2. 递归出口(也就是要有一定的条件让递归结束,否则会死循环
  3. 在写递归之前,想一想这个题目是否可以用递归公式解决

♥♥♥ 栈存储的顺序:

按顺序打印一个数字的每一位

(例如1234 打印出 1 2 3 4)

java 复制代码
public class Test {
    public static void main(String[] args) {
        print(1234);
    }
    public static void print(int n){
    //递归结束条件,满足条件后进入打印1,返回1
        if(n<10){
            System.out.println(n);//先打印再返回
            return ;
        }
        //递123,递12 再递1
        print(n/10);
        //归12打印2,归123打印3
        System.out.println(n%10);
    }
}

递归求N!的阶层

java 复制代码
public class Test {
    public static void main(String[] args) {
        System.out.println(fac(5));
    }
    public static int fac(int n){
    //条件必不可少
        if(n==1){
            return 1;
        }
        int sum= n * fac(n-1);
        return sum;
    }
}

递归求1+2+3+4+...+10

java 复制代码
public class Test {
    public static void main(String[] args) {
        System.out.println(sum(10));
    }
    public static int sum(int n){
        if(n==1){
            return 1;
        }
        return n+sum(n-1);
    }
}

写一个递归方法,输入一个非负整数。返回组成它的数字之和(不熟)

例如,输入1729,返回1+7+2+9,它的和是19

java 复制代码
public class Test {
    public static void main(String[] args) {
        System.out.println(sum(123));
    }
    public static int sum(int i){
        if (i<10){
            return i;
        }
        return i%10+sum(i/10);//3+sum(12/10) 2+sum(1)

    }
}

斐波那契数列(不熟)

//斐波那契数列

//不建议用递归写,太多重复的

//建议用for循环写

java 复制代码
public class Test {
    public static void main(String[] args) {
        System.out.println(sum(5));
    }
    public static int sum(int n){
        int f1=1;
        int f2=1;
        int f3=2;
        if (n==1){
            return 1;
        }
        if (n==2){
            return 1;
        }
        for (int i = 3; i <= n; i++) {
               f3=f1+f2;
                f1=f2;
                f2=f3;
        }
        return f3;
    }
}

总结

今天专攻递归,写了几道题目感觉还不错,对递归的思维更深刻了。

相关推荐
Moe488几秒前
@SpringBootApplication 注解(Spring Boot 自动配置)详解
java·后端
是苏浙1 分钟前
零基础入门C语言之C语言实现数据结构之栈
c语言·开发语言·数据结构
后端小张5 分钟前
【JAVA 进阶】SpringBoot 事务深度解析:从理论到实践的完整指南
java·开发语言·spring boot·后端·spring·spring cloud·事务
合作小小程序员小小店6 分钟前
web网页开发,在线%宠物销售%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·数据库·mysql·jdk·intellij-idea·宠物
合作小小程序员小小店18 分钟前
web网页开发,在线%档案管理%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·mysql·jdk·html·ssh·intellij-idea
故渊ZY18 分钟前
深入解析JVM:核心架构与调优实战
java·jvm·架构
ChinaRainbowSea19 分钟前
13. Spring AI 的观测性
java·人工智能·后端·spring·flask·ai编程
-大头.20 分钟前
SpringBoot 全面深度解析:从原理到实践,从入门到专家
java·spring boot·后端
Z_Easen21 分钟前
Spring AI:Reactor 异步执行中的线程上下文传递实践
java·spring ai
合作小小程序员小小店22 分钟前
web网页开发,在线%物流配送管理%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·css·数据库·jdk·html·intellij-idea