使用 Java 8 实现递归 lambda 函数

新手上路,请多包涵

Java 8 引入了 lambda 函数,我想实现类似阶乘的东西:

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

编译返回

  error: variable fact might not have been initialized

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

原文由 user2678835 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 624
1 个回答

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

在这个问题的情况下,代码将如下所示:

 // 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);
}

原文由 Andrey Morozov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题