Java 如何使用lambda表达式实现具有两个输入的递归函数?

Java 如何使用lambda表达式实现具有两个输入的递归函数?,java,recursion,lambda,java-8,Java,Recursion,Lambda,Java 8,我试图在java-8中使用lambda函数实现递归。有了现有的文档和在线资源,我就能够使用函数中的单个参数进行递归调用 请参阅下面的代码片段- private static final IntToLongFunction fact = x -> x == 0 ? 1L : x*MyTestClass.fact.applyAsLong(x-1); public static void main(String[] args) { System.out.

我试图在java-8中使用lambda函数实现递归。有了现有的文档和在线资源,我就能够使用函数中的单个参数进行递归调用

请参阅下面的代码片段-

    private static final IntToLongFunction fact = x  -> x == 0 ? 1L : x*MyTestClass.fact.applyAsLong(x-1);

    public static void main(String[] args) {
           System.out.println(fact.applyAsLong(4));
    }
现在,我正在尝试为下面的用例提供类似于上面代码片段的东西,在这个用例中,我试图找出两个数字的gcd-

// Normal recusive meethod for finding gcd
    private static long gcd(long a, long b){
        return b == 0 ? a : gcd(b, a%b);
    }
我尝试过使用函数接口来实现这一点,但没有成功

函数gcd=(长a,长b)->b==0?a:本通用条款适用于(b)


提前感谢您的帮助。

我想您应该创建一个函数,该函数接受两个
Long
参数并返回一个
Long

函数
是一个函数,它接受一个
Long
参数并返回一个
Long
。因此,这不是适合您的功能接口。相反,我认为您需要一个
双功能
。或者为了简洁起见,您可以使用
BinaryOperator
来表示相同的含义

文档中的
双功能是:

表示接受两个参数并生成 结果

二进制运算符

表示对相同类型的两个操作数的操作,生成 与操作数类型相同的结果。这是一门专门的学科
BiFunction
用于操作数和结果均为 同样的类型

另外,如果希望函数接受两个参数,则需要将两个参数传递给
this.gcd.apply()
。那你就应该准备好了

链接