递归与数组

简介: 递归与数组

👀,开始吧


递归,用最通俗的话来说就是,就是自己重复的调用自己,我们在C语言已经学过递归,其中的汉诺塔和斐波那契数列,下面,我们来用Java实现一下斐波那契数列


         
/迭代(循环)实现斐波那契数列
  /* public static int fib(int n){
      if(n<0) {
          return -1;
      }
          if(n==1||n==2){
              return 1;
          }
          int f1=1;
       int f2=1;
       int f3=-1;
       for( int i=3;i<=n;i++){
           f3=f1+f2;
           f1=f2;
           f2=f3;
       }
            return f3;
   }
*/
//递归实现斐波那契数列
   /* public static int fib(int n){
        if(n==1||n==2)
        {
            return 1;
        }
            int ret=fib(n-1)+fib(n-2);
            return ret;
    }
*/
    /*public static void main1(String[] args) {
      int ret=fib(41);
        System.out.println(ret);
    }
}
*/


递归实现n 的阶乘


//递归求 N 的阶乘
   public static int sum(int n){
       if(n==1)
       {
           return 1;
       }
       int tmp=n*sum(n-1);
       return tmp;
   }
    public static void main8(String[] args) {
        int ret=sum(5);
        System.out.println(ret);
    }


正序打印数字


 //递归打印数字的每一位
    //
    //作业内容
    //按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) (递归)
   /* public static void everyNumber(int n){
        if(n<10){
            System.out.println(n);
        }else{
            everyNumber(n/10);
            System.out.println(n%10);
        }
    }
//最后实现的一定是sout那一串代码
    public static void main3(String[] args) {
      everyNumber(123);*/
    }


逆序打印


public static void everyNumber(int n){
        if(n<10){
            System.out.println(n);
        }else{
            System.out.println(n%10);
            everyNumber(n/10);
        }
    }

这几个代码都是具有代表性的,大家慢慢学习


在写递归时,确实是有些地方难以理解的,在判断什么时候递归停止的条件时,实际上也就是在判断起始条件


数组

数组创建通式


数组存放元素类型[]数组名=new    类型[]长度


分类来有三种表达形式


先来说静态数组


int[]arr=new int[10];


这个有new的就是静态数组


new可以省略不写


总结三种表达


int[]  arr={1,2,3,4,5};


int[]  arr=new int[]{1,2,3,4,5};


int[]  arr=new int[5]


引用变量:int[]


变量:arr


数组中存储的是地址的哈希值,理解为地址


引用变量存储了存储对象的地址


即引用引用了一个对象,或者指向了一个对象


与C语言一样,下标都从0开始


public class TestDemo {
    public static void main(String[] args) {
        int[]  arr  =new int[]{1,2,3,4,5};
        for(int i=0;i<5;i++){
            System.out.println(arr.length);
        }
    }
}

计算长度就是这个方法

数组名.length

循环就和C语言一样,也可以使用for each

但是区别在与


for each就是遍历元素而已,如果要用下表判断数据,比如arr[1]*2,要使用某个元素的时候要用for循环,不可以用foreach。


JVM的结构:


Java虚拟机栈,本地方法栈,堆,方法区,程序计数器


具体的,我们下期再详细讲解奥,886!



相关文章
|
4月前
|
缓存 人工智能 开发者
大模型推理优化实战:从延迟到吞吐的工程权衡
在人工智能从“能用”迈向“好用”的关键阶段,大语言模型(LLM)的部署效率已成为产品落地的核心瓶颈。开发者常面临一个现实困境:模型在实验室跑得飞快,上线后却响应迟缓、成本飙升。本文将深入探讨大模型推理中的关键技术挑战与优化策略,帮助工程师在延迟(Latency)、吞吐量(Throughput)和成本之间找到最佳平衡点。
|
5月前
|
人工智能 自然语言处理 搜索推荐
想让豆包在答案里提到你的官网?这三个步骤缺一不可
想让豆包引用你的官网?必须做好三步:一是将内容模块化、结构清晰,便于AI理解;二是通过专业资质、数据出处和结构化标记提升权威性;三是持续监测引用效果,优化内容策略。AI搜索时代,被“看见”才能赢得客户。
845 1
|
XML Java Maven
log4j 日志的简单使用
这篇文章介绍了Log4j日志框架的基本使用方法,包括在Maven项目中添加依赖、配置`log4j.properties`文件以及在代码中创建和使用Logger对象进行日志记录,但实际打印结果中日志级别没有颜色显示。
log4j 日志的简单使用
|
存储 安全 测试技术
渗透测试之白盒测试:一种深入的安全性评估方法
渗透测试中的白盒测试是一种利用系统详细信息(如源代码、数据库结构和网络拓扑)进行深度安全评估的方法。通过源代码审查、数据库分析和网络拓扑研究,测试人员能更准确地发现漏洞并提高测试效率。尽管白盒测试能深入揭露潜在威胁,但也面临信息获取难、代码理解复杂及对测试人员高技能要求的挑战。
渗透测试之白盒测试:一种深入的安全性评估方法
|
Dubbo 网络协议 Java
性能基础之常见RPC框架浅析
【4月更文挑战第23天】性能基础之常见RPC框架浅析
919 1
性能基础之常见RPC框架浅析
|
Linux 网络安全 数据安全/隐私保护
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
|
人工智能 自动驾驶 开发者
人工智能伦理困境:机器自主性与人类责任
在人工智能技术迅猛发展的今天,我们面临着一个前所未有的伦理挑战。随着机器智能的不断提升,它们在决策过程中展现出越来越多的自主性。本文将探讨这一现象背后的伦理问题,特别是当AI系统的行为导致负面后果时,我们应如何界定人类的责任。我们将分析几个关键领域,包括自动驾驶汽车、医疗诊断以及军事应用,来揭示当前的法律和道德框架在应对这些挑战时的不足之处。通过提出一系列针对性的建议,本文旨在推动对AI伦理问题的深入讨论,并促进相关法规的完善。
|
人工智能 前端开发 API
基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步
基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步
751 0
|
机器学习/深度学习 搜索推荐 数据管理
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
|
存储 算法 搜索推荐
KMP 算法(Knuth-Morris-Pratt)
KMP算法,全称为Knuth-Morris-Pratt算法,是一种字符串匹配算法。它的基本思想是,当出现字符串不匹配时,可以知道一部分文本内容是一定匹配的,可以利用这些信息避免重新匹配已经匹配过的文本。这种算法的时间复杂度为O(n+m),其中n是文本串的长度,m是模式串的长度,比暴力匹配算法具有更高的效率。KMP算法的核心是利用模式串本身的特点,预处理出一个next数组,用于在匹配过程中快速移动模式串。
1110 0
KMP 算法(Knuth-Morris-Pratt)