在一个方法内部,对自身进行调用。递归举例:

public class Test { public static void main(String arg[]) { System.out.println(method(5)); } public static int method(int n) { if(n == 1) { return 1; }else { return n * method(n-1); } }}

这个程序相当于我要调用method()方法,这个方法的返回值是int类型,参数是int类型。当参数是1时,方法返回1。当参数是其他时,返回值是n*method(n-1)。

递归方法执行过程:

打开网易新闻 查看精彩图片

当程序执行到n * method(n-1)时,会又跳到method()方法中执行,等执行完了返回值后,才能执行 n * method(n-1)。

也就是当程序执行method(3)时,要等method(2)执行完返回值后,才能继续执行。执行method(2)时又要等method(1)返回。

求Fibonacci数列:1,1,2,3,5,8,…第40个数的值。数列满足递推公式:
$$
F_1=1,F_2=1

$$

F_n=F_{n-1}+F_{n-2}(n>2)Fn=Fn1+Fn2(n>2)

用递归的方法实现Fibonacci:

public class Test { public static void main(String arg[]) { 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); } }}

递归可以用迭代方法完成同样的问题。

非递归调用方法解决Fibonacci数列问题:

public static void main(String[] args) { System.out.println(f(40));} public static long f(int index) { if(index == 1 || index == 2) { return 1; } long f1 = 1L; long f2 = 1L; long f = 0; for(int i=0; i<index-2; i++) { f = f1 + f2; f1 = f2; f2 = f; } return f;}