递归与数组

简介: 递归与数组

👀,开始吧


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



相关文章
|
7月前
函数递归(详细解读)(下)
函数递归(详细解读)(下)
|
7月前
|
算法
函数递归(详细解读)(上)
函数递归(详细解读)(上)
|
4天前
|
机器学习/深度学习 算法
详解函数递归
详解函数递归
|
9月前
|
算法
使用遍历方法和分治法求两个数组的值
看似简单的姐数组中的最大值实际上体现了不同的思路本文将以比较数组大小为背景,分别展示普通算法和分治法,通过对比来简述分治法。 问题描述 给定一个整数数组,编写一个算法来找到数组中的最大值和最小值。
47 0
|
10月前
|
算法
【算法】用递归的方法逆序输出或倒置一个栈
【算法】用递归的方法逆序输出或倒置一个栈
96 0
【算法】用递归的方法逆序输出或倒置一个栈
|
10月前
|
算法 C语言
函数的递归
当我们在生活中遇到一个复杂问题时,我们会想方设法将其解决,这时我们会有很多种方法,我们可以将问题一步一步顺序化,也可以使用逆向思维将其巧妙化解。C语言中就给我们提供了一种将问题大事化小思想——递归。
54 0
|
11月前
字符串的逆序(循环和递归两种解法)
字符串的逆序(循环和递归两种解法)
90 0
|
存储
【C】逆序字符串(俩种递归思路)
【C】逆序字符串(俩种递归思路)
63 0
【C】逆序字符串(俩种递归思路)
【递归】递归求n个数中的最大值
【递归】递归求n个数中的最大值
68 0
【递归】递归求n个数中的最大值
|
机器学习/深度学习
用递归的方法求n!
用递归的方法求n!
65 0
用递归的方法求n!