java吧 关注:1,295,068贴子:12,828,846
  • 8回复贴,共1

写了个用lambda表达式实现递归的类。

只看楼主收藏回复

class Fix<T,R>{
<T,R> Function<T,R> recus(Function<Function<T, R>, Function<T, R>> f){
Objects.requireNonNull(f);
return (T x)->f.apply(this.recus(f)).apply(x);
}
}
public class LamdaDemo{
public static void main(String[] args){
Function<Integer, Integer> fun = new Fix<>()
.recus(f->x->x<=1?1:x*f.apply(x-1));
System.out.println(fun.apply(5));

//打印结果为 5*4*3*2*1 =120


IP属地:湖北1楼2014-05-21 21:28回复
    不写注释不行啊。。
    1.8的需要用到 java.util.function的包。
    是为了方便 lambda 表达式而添加的一系列辅助函数。
    这么快沉了,坑爹。


    IP属地:湖北2楼2014-05-21 21:44
    回复
      2026-01-18 22:56:34
      广告
      不感兴趣
      开通SVIP免广告
      1.这个贴吧里很少有人用JDK1.8,绝大多数人依然喜欢基于冯诺依曼体系的过程式语言,对函数式的编程风格不太适应。
      2.java的lambda真心丑,
      同样的算法,如果用erlang的话:
      A = fun(F) -> fun(M) -> when M > 0 -> F(M-1)*M;(M) -> 1;end end,
      A(5).
      这样写显然要漂亮的多,并且变量没有副作用


      IP属地:美国3楼2014-05-21 21:55
      收起回复
        蛋疼 看不懂


        IP属地:上海4楼2014-05-21 21:57
        收起回复
          表示看不懂


          5楼2014-05-21 22:14
          回复