递归与数组

我们已经学习了方法,今天我们来认识一下递归与数组

1.递归

2.递归的代码举例

3.数组的几种类型

4.分析数组在栈区的创建与销毁

,开始吧

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

但是区别在与

递归与数组_第1张图片

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

JVM的结构:

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

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

今天再为大家做一副涂鸦

递归与数组_第2张图片

谢谢大家支持! 

你可能感兴趣的:(java)