递归算法是一种特殊的调用形式,是方法自己调用自己,这样有点比较难理解,但我们也可以认为方法调用另外一个方法,只不过方法名相同而已,且方法的算法也相同。这样也许还是比较难理解,我们可以用一个图来表示该算法:
我们可以举个简单的例子来运用下递归算法。我们在读初中的时候,老师一般会出这样一道题目:计算出1+2+3+……+100的结果,现在学程序阶段,我们首先想到的一般是用循环来做,但其实我们也可以使用递归算法来做这道题目。代码如下:
public class Test {
public static void main(String[] args) {
System.out.println("计算结果:"+sum(100));
}
private static int sum(int num) {
if(num==1){
return 1;
}
else{
return num+sum(num-1);
}
}
}
程序运行结果:
计算结果:5050
上面程序完成了递归算法的调用,其实就详单与100+sum(99)+sum(98)+……+sum(1),通过不断的改变传入的数据,从而实现递归调用。
一、递归的应用
递归算法用于处理一些无法穷举的计算(像上面的计算是可以穷举的出的),这些算法有一个共同点就是计算数据或对象的变化是用规律的,也即算法相同。这时,我们就可以不断使用这个方法自己调用自己,从而算出计算结果。比如计算一台电脑中某个文件夹所包含的文件的个数,这时我们可以发现这个无法穷举的,因为我们不知道这个文件夹包含多少个文件夹以及文件,这时就可以使用递归算法来算。读者可以自己去试试。
二、递归的注意事项
递归调用在操作时如果处理不好,则有可能出现内存的溢出。从我们上面的程序就可以发现,递归调用时必须要有一个明确的结束条件,这样,在调用递归时就有一个明确的推出条件,否则很容易进入死循环。
<!--EndFragment-->