作为初学者,很多人都搞不清递归与循环的区别,下面以两个简单的例子来说明
循环代码
public class Math {
public static void main(String[] args) {
int x;
int y=1;
for(x=10;x!=1;x--) {
y*=x;
}
System.out.println(y);
}
}
递归代码
public class Math {
public static void main(String[] args) {
sum(10);
}
private static int sum(int x) {
int y = 1;
if(x==1) {return x;};
y=x*sum(x-1);//循环调用sum函数
System.out.println("x阶乘为"+y);
return y;
}
}
下面以两幅图说明循环和递归的执行过程
循环(图片来自百度图片)
递归
那为什么会出现这样的区别呢,其实递归在程序运行时是放到栈中处理的;而我们知道栈只能进不能出如图下
入栈(图片来自百度图片)
出栈(图片来自百度图片)
所以这种特性就造就了递归方法和栈一样,在某些小问题上用循环结构也就是队列结构会比较快速方便,用递归栈结构会比较繁琐且耗费资源,但是某些方面递归又能实现循环解决不了的东西,可以说各有优点与缺点。