1、递归的定义:
在一个方法内部,对自身进行调用。当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了。
2、地柜方法的执行过程:
递归调用是指在方法执行过程中出现该方法本身的调用。
3、递归方法的典型事例:
Fibonacci(斐波那契)数列
求Fibonacci数列:1,1,2,3,5,8.......第5个数的值。数列满足递推公式:
F1 = 1, F2 = 1,Fn = Fn-1 + Fn-2 (n>2).
public class Fibonacci{
public static void main (string[] args){
System.out.println(f(5));
}
public static int f(int n){
if(n==1||n==2){
return 1;
}else{
return f(n-1)+f(n-2);
}
}
}
用图示上述代码:
对代码和图示进行解析:
首先,从main方法开始执行,然后执行f(5),5既不等于1,也不等于2,得到f(5)=f(4)+f(3);
在f(5)中对于f(4)和f(3),首先调用f(4),4既不等于1,也不等于2,得到f(4)=f(3)+f(2);
在f(4)中对于f(3)和f(2),首先调用f(3),3既不等于1,也不等于2,得到f(3)=f(2)+f(1);
在f(3)中对于f(2)和f(1),n=2、n=1,立即返回1,然后f(3),f(4),f(5)依次返回它们各自的值。
然后再调用f(5)=f(4)+f(3)中的f(3),然后立即依次返回f(1)、f(2),f(3),最后返回到f(5)
最后f(5)返回到main方法,程序结束。