递归算法
什么是递归?
递归,就是方法内部调用方法自身
注意事项:
找到规律,编写递归公式
找到出口(边界值),让递归有结束边界
注意:如果递归太多层,或者没有正确结束递归,则会出现“栈内存溢出Error”!
在递归的方法中,先写出口,再写公式计算。
问题:为什么会出现栈内存溢出,而不是堆内存溢出?每执行一个方法在栈中生成一个栈帧。栈空间有限,一般几M。
求阶乘
public static void main(String[] args) {
System.out.println(getJc(4));
}
public static int getJc(int n) {
if (n <= 0) {
throw new RuntimeException("异常参数");
}
if (n == 1) {
return 1;
}
return n * getJc(n - 1);
}
求斐波那契数列
如何实现递归求斐波那切数列第N个数字的值(传说中的不死神兔就是这个问题)
数字的规律:1,1,2,3,5,8,13,21…
public static void main(String[] args) {
System.out.println(getFb(6));
}
public static int getFb(int n){
if (n==1 || n==2){
return 1;
}
return getFb(n-1)+getFb(n-2);
}