Java 函数式编程 - 递归
递归是在函数中调用相同的函数,直到满足某些条件。它有助于将大问题分解为小问题。递归还使代码更具可读性和表现力。
命令式与递归式
以下示例显示了使用这两种技术计算自然数之和。
public class FunctionTester { public static void main(String[] args) { System.out.println("Sum using imperative way. Sum(5) : " + sum(5)); System.out.println("Sum using recursive way. Sum(5) : " + sumRecursive(5)); } private static int sum(int n){ int result = 0; for(int i = 1; i <= n; i++){ result = result + i; } return result; } private static int sumRecursive(int n){ if(n == 1){ return 1; }else{ return n + sumRecursive(n-1); } } }
输出
Sum using imperative way. Sum(5) : 15 Sum using recursive way. Sum(5) : 15
使用递归,我们将 n-1 个自然数之和的结果与 n 相加以获得所需的结果。
尾递归
尾递归表示递归方法调用应该在末尾。以下示例显示使用尾递归打印数字系列。
public class FunctionTester { public static void main(String[] args) { printUsingTailRecursion(5); } public static void printUsingTailRecursion(int n){ if(n == 0) return; else System.out.println(n); printUsingTailRecursion(n-1); } }
输出
5 4 3 2 1
头递归
头递归表示递归方法调用应该在代码的开头。以下示例显示使用头递归打印数字系列。
public class FunctionTester { public static void main(String[] args) { printUsingHeadRecursion(5); } public static void printUsingHeadRecursion(int n){ if(n == 0) return; else printUsingHeadRecursion(n-1); System.out.println(n); } }
输出
1 2 3 4 5