用 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
广告