首页 新闻 会员 周边

On java 8 lamder递归代码详解?

0
悬赏园豆:20 [已关闭问题] 关闭于 2020-06-14 15:55

如下:

interface IntCall {
  int call(int arg);
}
public class RecursiveFactorial {
  static IntCall fact;
  public static void main(String[] args) {
    fact = n -> n == 0 ? 1 : n * fact.call(n - 1);//这句不理解,还劳请博友详解
    for(int i = 0; i <= 10; i++)
      System.out.println(fact.call(i));//这句不理解,还劳请博友详解
  }
}

见过c的方法递归,这个lamder递归理解不了...
还请各位·不吝赐教,拜托了!

main(void)的主页 main(void) | 初学一级 | 园豆:133
提问于:2020-06-14 15:09
< >
分享
所有回答(3)
0

第一个地方意思是:n是call方法的入参,箭头后面是实现,然后把它赋值给fact变量,这是函数式编程的写法,允许变量直接引用函数。
第二个地方的意思和第一个地方的相关的,就是通过fact变量去调用call方法。

我是满意吖 | 园豆:386 (菜鸟二级) | 2020-06-22 17:35
0

推荐查阅,JAVA 8 lambda 表达式使用

Ankermaker | 园豆:251 (菜鸟二级) | 2020-06-22 19:41
0

1!= 1
2!= 21 = 2
3!= 3
21 = 6
4!= 4
321 = 24
5!= 54321 = 120
6!= 65432*1 = 720

n*fact.call(n-1)会将每一次的结果赋值给fact, 意思就是用每一次的结果去乘下的传进来的n而已,就得到了1,2,6,24,120这样的结果而已。就是阶乘级数

iuserty | 园豆:202 (菜鸟二级) | 2023-03-09 15:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册