递归:
递归就是在运行的过程中自己调用自己。
注意事项:
。递归要有出口,不然就是死递归,写递归,重要的一步就是要找到出口。
。递归的次数不能过多
。递归的思想就是拆分和合并的思想
例如,下列为某人祖先的递归定义:
某人的双亲是他的祖先(基本情况)。某人祖先的双亲同样是某人的祖先(递归步骤)。斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列(不死神兔):1、1、2、3、5、8、13、21.....
斐波纳契数列是典型的递归案例:
n=1或n=2时,fib(n)=1
n>2时,fib(n)=fib(n-1)+fib(n-2)
这就是递归的通式,递归的出口为n=0或n=1;
由此可编程为:
private static long fib(int i) {
if(i==1||i==2){
return 1;
}else{
return fib(i-1)+fib(i-2);
}
实例:求n的阶乘
n=1,digui(n)=1
n=2,digui(n)=2*digui(1)
n=3,digui(n)=3*digui(2)
..... .........
...... .........
n>1 ,digui(n)=n*digui(n-1)
代码实现:
public class Test2 {
public static void main(String[] args) {
// 5的阶乘
//int num=5*4*3*2*1;
//递归做 5 的阶乘
Long r=diGui(5);
System.out.println(r);
}
public static Long diGui(int i) {
if(i==1){
return 1L;
}else{
return i*diGui(--i);
}
}
}
内存图: