递归意味着一个函数调用了自身。在Java中可以编写递归的lambda表达式,但是这个lamba表达式必须被赋值给一个静态变量或一个实例变量,否则会出现编译错误。
- 赋值给静态变量实现阶乘函数
package org.example.recursive;
import java.util.function.IntUnaryOperator;
public class RecursiveFactorial {
static IntUnaryOperator fact;
public static void main(String[] args) {
fact = n -> n == 0 ? 1 : n * fact.applyAsInt(n - 1);
for (int i = 0; i < 10; i++) {
System.out.println(fact.applyAsInt(i));
}
}
}
执行结果
1
1
2
6
24
120
720
5040
40320
362880
- 赋值给实例变量实现斐波那契数列
package org.example.recursive;
import java.util.function.IntUnaryOperator;
public class RecursiveFibonacci {
IntUnaryOperator fib;
RecursiveFibonacci() {
fib = n -> n == 0 ? 0 :
n == 1 ? 1 :
fib.applyAsInt(n - 1) + fib.applyAsInt(n - 2);
}
int fibonacci(int n) {
return fib.applyAsInt(n);
}
public static void main(String[] args) {
RecursiveFibonacci fibonacci = new RecursiveFibonacci();
for (int i = 0; i <= 10; i++) {
System.out.println(fibonacci.fibonacci(i));
}
}
}
执行结果
0
1
1
2
3
5
8
13
21
34
55