递归是计算机编程中的一个概念,它指的是在解决问题时将问题分解为更小的子问题,并通过重复这个过程来解决问题。递归通常使用函数作为其实现方式,这个函数可以调用自身来解决问题。在编程中,递归被广泛应用于解决方案的搜索、排序、查找、分组和聚合等问题。
递归算法的基本思想是将问题分解为更小的子问题,直到子问题的规模足够小,可以直接解决,然后再将子问题的解组合起来得到原问题的解。这个过程可以不断重复,直到问题得到完全解决。
递归算法的优点是可以简化问题的求解过程,避免了循环等繁琐的操作。但是,递归算法也有一些缺点,例如可能导致堆栈溢出等问题,因此需要谨慎使用。
在实际编程中,递归算法通常被用于解决那些可以被分解为更小的子问题的问题。例如,在计算阶乘时,递归函数是一个常用的工具。
递归阶乘
public class _01Factorial {
public static int f(int n) {
if(n == 1) {
return 1;
}
return n * f(n - 1);
}
public static void main(String[] args) {
System.out.println(f(3)); // 结果 6
// 拆解递归过程代码
// 逐级向内递,递到最内层,逐级往回归
/*f(int n = 3){ //递
return 3 * f( n =2 ) { //递
return 2 * f( n = 1 ){ //递
if(n == 1) {
return 1;
}
}
}
}*/
}
}
递归反向打印字符串
public class _02ReversePrintString {
public static void f(int n, String str) {
if( n == str.length() ) {
return;
}
f( n + 1, str);
System.out.println(str.charAt(n));
}
public static void main(String[] args) {
String s = "abcdefghijk";
f(0, s);
}
}
递归二分查找
public class _03BinarySearchDemo {
public static int search(int[] a, int target){
return f(a, target, 0, a.length - 1);
}
private static int f(int[] a, int target, int i, int j) {
if(i > j) {
return -1 ;
}
int m = (i + j) >>> 1 ;
if(target < a[m]) {
return f(a, target, i, m - 1);
}else if(a[m] < target) {
return f(a, target, m + 1, j);
}else {
return m ;
}
}
public static void main(String[] args) {
int[] arr = {1,2,4,6,8,10,12} ;
System.out.println(search(arr, 8));
}
}