Java 如何使用lambda表达式实现具有两个输入的递归函数?
我试图在java-8中使用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.
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()
。那你就应该准备好了
链接