Java的递归。

今天我们来谈谈Java递归。首先我们来看看下面的代码。从字面的意思来理解,递归就是不断的重复的调用自己.还是来看看下面的代码。

/**
 * @author hackbase  递归的学习和使用,递归头和递归体.
 */
public class TestLoopDeep {
    public static void main(String[] args) {
        a();


    }



    public static void a(){
        System.out.println("a");
          b();

    }

    public static   void b(){
        System.out.println("b");
    }

}



上面的代码非常的简单,我们在主方法里面调用a()方法,在a方法里面调用B方法。输出的结果为a,b这点毫无疑问。我们将上面的代码稍微做下修改,既然a方法里面可以调用b方法,那么是否可以调用本身了。答案是可以的,我们修的代码如下.

public class TestLoopDeep {
    public static void main(String[] args) {
        a();


    }

    public static void a(){
        System.out.println("a");
          a();

    }

}

修改的代码如上,虽然是可以调用,但是编译器会报错。输出的结果为a但是编译器抛出一堆错误结束程序的运行.这究竟是为什么了,是因为在程序不断的调用自己的时候,程序不知道何时结束,直到资源的耗尽,在使用递归的时候,我们一定要确定递归的结束条件,以及递归体。一定要把这两个条件确定了。我们来看看下面的代码。

/**
 * @author hackbase  递归的学习和使用,递归头和递归体.
 */
public class TestLoopDeep {


    public static void main(String[] args) {
        a();

    }

     static int count=0;
    public static void a() {
        System.out.println("a");
        count++;
        if (count < 20) {
            a();
        } else {
            return;
        }

    }

}


在这段代码里面,我们唯一添加了一个判断语句,指示何时结束程序的运行当count>20的时候,我们必须要去调用a函数.那么这个程序就不会报错。

递归必须满足两个条件1.递归的结束条件。递归在什么条件下结束。2.递归体。就是什么要递归。下面我们来利用递归的代码来计算阶乘,来看看下面的代码。我们要计算n的阶乘。

代码如下;

import java.util.Scanner;

/**
 * @author hackbase  递归的学习和使用,递归头和递归体.
 */
public class TestLoopDeep {


    public static void main(String[] args) {
        System.out.println("请你输入你要计算阶乘的数字---->\n");
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        int sum = Test(count);
        System.out.println("递归的结果为:" + sum);

    }

    public static int Test(int num) {
        if (num == 1) {
            return 1;
        } else {
            return num * Test(num - 1);
        }
    }


}




在上面的代码里面,我们使用递归来实现了求阶乘,但是该方法是i非常的消耗系统的资源的,在一般情况下,建议不要使用

凡是在能够使用递归的地方都可以使用循环来代替.

猜你喜欢

转载自blog.csdn.net/hackerbaseing/article/details/89761887