Java中的递归函数应用及实例
一、递归函数的概念
递归函数指的是函数调用自身的函数,也就是说在函数中,函数又调用了函数自身,直到满足某一条件终止递归。
二、递归函数的优点
递归函数相对于循环语句而言,有以下优点:
1.代码简洁:用递归函数可以使代码变得更加简洁。
2.可读性好:递归函数更符合人们自然的思维方式。
3.灵活性好:递归函数可以轻松实现某些循环难以实现的功能。
三、递归函数的应用实例
1.计算阶乘
阶乘指的是从1到n所有正整数的积。例如5!=1*2*3*4*5=120。递归函数可以轻松的实现阶乘计算。
代码实现:
public static int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
2.斐波那契数列
斐波那契数列是指1、1、2、3、5、8、13、21、34……这样的数列,即数列的 项和第二项为1,从第三项开始,每一项是前两项的和。
代码实现:
public static long fibonacci(int n) {
if (n == 1 || n == 2)
return 1;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
3.迷宫问题
假设有一个n行m列的迷宫,墙用0表示,可以通过的路径用1表示,求从迷宫的左上角到右下角的路径。
代码实现:
public static boolean findPath(int[][] maze, int x, int y) {
int n = maze.length;
int m = maze[0].length;
if (x < 0 || x >= n || y < 0 || y >= m || maze[x][y] != 1)
return false;
if (x == n - 1 && y == m - 1) {
maze[x][y] = 2;
return true;
} else {
maze[x][y] = 2;
if (findPath(maze, x + 1, y) || findPath(maze, x, y + 1)
|| findPath(maze, x - 1, y) || findPath(maze, x, y - 1)) {
return true;
} else {
maze[x][y] = 3;
return false;
}
}
}
四、递归函数的注意事项
1.递归次数不能过多,否则可能会导致崩溃。
2.递归调用要避免产生死循环。
3.递归函数有时不如循环语句高效。
五、总结
递归函数是Java语言中十分重要的一种函数,它可以方便的实现一些循环难以实现的功能。但是在使用递归函数时,需要注意递归次数和避免死循环的问题,这样才能更好地利用递归函数实现我们的功能。
