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