java - 使用 Java 8 实现递归 lambda 函数

标签 java recursion lambda java-8

Java 8 引入了 lambda 函数,我想实现像阶乘这样的东西:

 IntToDoubleFunction fact = x -> x == 0 ? 1 : x * fact.applyAsDouble(x-1);

编译返回

  error: variable fact might not have been initialized

如何引用函数本身。类是匿名的,但实例存在:它被称为 fact

最佳答案

我通常使用(一次性定义所有功能接口(interface))通用帮助类,它包装了功能接口(interface)类型的变量。 这种方式解决了局部变量初始化的问题,让代码看起来更清晰。

如果出现这个问题,代码将如下所示:

// Recursive.java
// @param <I> - Functional Interface Type
public class Recursive<I> {
    public I func;
}

// Test.java
public double factorial(int n) {

    Recursive<IntToDoubleFunction> recursive = new Recursive<>();
    recursive.func = x -> (x == 0) ? 1 : x * recursive.func.applyAsDouble(x - 1);

    return recursive.func.applyAsDouble(n);
}

关于java - 使用 Java 8 实现递归 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429667/

相关文章:

java - System.out.println不打印数组数据

java - 使用 fragment 和列表时运行时出现未知的致命异常

c++ - 分区、斯特林数和第一个切比雪夫多项式的递归函数

python - 如何将两个 lambda 函数合并为一个?

java - 有条件的 Java 包分发

Java:抽象类中的直接构造函数

C# 二叉树的 - Inorder/Preorder 和 PostOrder(递归帮助)

algorithm - 递归方法 : How can we generate all possibilities on braces?

c++ - 在嵌套的 lambda 中按值捕获指针会导致段错误

c# - 用于替换数据表行中所有出现的字符串的 Lambda 函数