在java中,函数递归是会报编译错误的。比如我定义一个斐波那契函数:
public class RecursiveFunction {public static void main(String[] args) {fibonacci = x -> x < 3 ? 1 : fibonacci.apply(x - 1) + fibonacci.apply(x - 2);}
}
它就报了这个错:
java: 可能尚未初始化变量fibonacci
解决办法
只需要将函数提升为类属性或者静态属性就可以了。这是非静态属性的例子:
public class RecursiveFunction {private Function<Integer, Integer> fibonacci;public RecursiveFunction() {fibonacci = x -> x < 3 ? 1 : fibonacci.apply(x - 1) + fibonacci.apply(x - 2);}public static void main(String[] args) {RecursiveFunction function = new RecursiveFunction();System.out.println(function.fibonacci.apply(6));}
}
这是静态属性的例子:
public class RecursiveFunctions {private static Function<Integer, Integer> fibonacci;static {fibonacci = x -> x < 3 ? 1 : fibonacci.apply(x - 1) + fibonacci.apply(x - 2);}public static void main(String[] args) {System.out.println(fibonacci.apply(6));}
}