本文属于算法图解系列。
1 递归的由来
作者先用一个拆盒子找钥匙的故事,来介绍递归的由来。并且介绍了递归与for循环的区别:
如果使用循环,程序的性能可能更高;如果使用递归,程序可能 更容易理解。如何选择要看什么对你来说更重要。
2 基线条件与递归条件
编写递归函数时,必须告诉它何时停止递归。正因为如此,每个递归函数都有两部分:基线 条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,而基线条件则 指的是函数不再调用自己,从而避免形成无限循环。
举例:
3 递归调用栈
作者先介绍了栈 stack的基本概念,只有两个基本操作:入栈(压入push),出栈(弹出pop)
作者接着介绍了递归调用栈的例子,求N的阶乘N!
public class FactTest {
public static void main(String[] args) {
System.out.println(fact(3));
}
public static int fact(int x){
if(x==1){
return 1;
}else{
return x*fact(x-1);
}
}
}
使用栈虽然很方便,但是也要付出代价:存储详尽的信息可能占用大量的内存。
递归实际使用要自己分析利弊,栈的用途还有分析。