今天我们来谈谈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非常的消耗系统的资源的,在一般情况下,建议不要使用
凡是在能够使用递归的地方都可以使用循环来代替.