感谢尚硅谷韩顺平老师深入细致的讲解
递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。可以解决像8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题,快排,归并排序,二分查找,分治算法等。
典型的问题
打印问题
//输出什么?
public static void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
输出
n=2
n=3
n=4
如果打印语句放在else子句中就会输出
n=2
计算某个整数的阶乘问题
//阶乘
public static int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
fabonaci数列
//斐波拉契数列
public static int fabonaci(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fabonaci(n-1 ) + fabonaci(n-2 );
}
}
递归需要遵循的原则
1)执行一个方法时,就创建一个新的受保护的独立空间(栈空间)