递归与数组

简介: 递归与数组

👀,开始吧


递归,用最通俗的话来说就是,就是自己重复的调用自己,我们在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!



相关文章
函数递归(详细解读)(下)
函数递归(详细解读)(下)
|
算法
函数递归(详细解读)(上)
函数递归(详细解读)(上)
|
24天前
递归
【10月更文挑战第23天】递归。
14 4
|
1月前
函数的递归
函数的递归
16 0
|
6月前
|
C语言
函数递归.
这篇内容介绍了递归的概念,指出在C语言中递归是函数自我调用。它通过一个简单的死递归示例展示了未设置停止条件会导致栈溢出。接着,文章阐述了递归的两个必要条件:存在限制条件以终止递归,以及每次递归调用都更接近这个限制条件。随后,文章通过计算阶乘和顺序打印整数位的例子展示了递归的应用,并对比了递归和迭代的效率,强调在存在冗余计算时,迭代通常比递归更高效。
33 0
|
6月前
|
机器学习/深度学习 算法
详解函数递归
详解函数递归
|
算法
使用遍历方法和分治法求两个数组的值
看似简单的姐数组中的最大值实际上体现了不同的思路本文将以比较数组大小为背景,分别展示普通算法和分治法,通过对比来简述分治法。 问题描述 给定一个整数数组,编写一个算法来找到数组中的最大值和最小值。
77 0
字符串的逆序(循环和递归两种解法)
字符串的逆序(循环和递归两种解法)
168 0
【递归】递归求n个数中的最大值
【递归】递归求n个数中的最大值
107 0
【递归】递归求n个数中的最大值
|
算法 C++
经典算法详解(11)递归查找数组中的最大值
题目:编写一个程序,用递归的方法实现查找数组中的最大值。 C++实现 1 #include 2 3 using namespace std; 4 //第一种方法是常规方法,不是使用递归,首先将第一个元素的值赋值给max,然后遍历数组, 5 //当遇到超高max的值时将其赋值给max,最...
1885 0