Java入门(十四)

递归

  • A方法调用B方法,例如main方法里面调用其他方法。而递归就是:A方法代用A方法,就是自己调用自己。
public static void main(String[] args) {
        Demo06 test = new Demo06;   //test代表Demo06这个类,然后它里面有这么个方法,调用它就好了
        test.test();
    }
    public void test(){
        test();
    }
  • 这样调用会报一个错,栈溢出
  • 递归能解决一些问题,利用递归可以解决一些复杂的问题,它通常把一个大型复杂的问题层层转化为一个相似比较小的问题求解,他可以大大减少程序的代码量。
  • 递归包含两个部分:
  1. 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
  2. 递归体:什么时候需要调用自身方法。
  • 刚才的test()就是没有递归头,他会不停循环,始终出不来。需要一个递归头表示什么时候不调用自身。
  • 阶乘, 2!就是 21 , 3!是 321 ,5!就是 54321 。首先阶乘的做法是你传几就要调用几,直到调用到1为止。如果n(传递的参数)等于1,就让他return 1 。因为1的阶乘是他本身。2的阶乘是21 。
public static int  f(int n){
        if (n==1){
            return 1;
        }else{
            return n*f(n-1);
        }
    }
  • 上面的公式 ,不等于的时候,n乘以的是再调用f()这个的函数。我们来试一下输出f(5)
public static void main(String[] args) {
        System.out.println(f(5));
    }

java方法的调用 java方法调用自身_java方法的调用

  • 首先 main 方法要找 f(5) ,但是他5-1不等于0,所以找f(4),层层递进一直走到f(1),一直调用自己。f(1)可以返回一个具体的结果,最后乘回来。因为1有结果了,所以他会找2,2的结果传递给3,依次再传递过去。最后的结果在main方法里面输出。
  • 递归一定要有什么时候不调用自身方法,让递归走到尽头,f(1)之后程序就不走了。
  • 边界条件就是程序执行到最后一个条件的时候回执行倒地,我们这个程序在他达到f(1)后,所有的东西瞬间都会有值,一步一步返回。递归前阶段,不等于1的时候就不停的调用自身。 返回阶段:从最大的数开始,5*(5-1) ,所以代码就是这么来的。递归是方便程序员。
  • Java都是使用栈机制,相当于有一个罐子,最底下是main方法,每在上面调用一个方法就会压一层。如果这个方法结束了,他就消失了。main方法执行完了,他的栈就空了,不跑程序了。假设无限往栈里面压东西,他的空间就不行了,对于嵌套层次较深的算法,递归就会力不从心。物理造成内存崩溃。能不用递归就不用递归,递归可以用一些方法来代替的,基数较少才用。
  • 作业:写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现。
  1. 写4个方法:加、减、乘、除
  2. 利用循环+switch进行用户交互
  3. 传递需要操作的两个数
  4. 输出结果