使用lambda函数的阶乘递归实现

问题描述

我尝试使用Lambda函数实现阶乘的代码代码中的错误指出,运算符“ ==”或“-”不能在lambda函数中应用。

@FunctionalInterface
public interface RecFunction {
    Integer recursiveFunction(Integer n);
}
        // Lambda Function
        Integer Fact = (n)-> {
            if (n == 0) return 1;
            else return n * factorial.recursiveFunction ( n - 1 );
        };

解决方法

lambda表达式的目标必须是功能接口,而不是Integer

解决该问题后,您可能希望Factfactorial成为同一变量。

如果factorial是局部变量,那是不可能的,但是实例变量或静态变量是可能的。

例如:

class Test 
{
    static RecFunction factorial = null;

    public static void main (String[] args)
    {
        factorial = n -> {
            if (n == 0) {
                return 1;
            } else {
                return n * factorial.recursiveFunction (n - 1);
            }
        };
        System.out.println (factorial.recursiveFunction(5));
    }
}

lambda表达式也可以重写为:

factorial = n -> n == 0 ? 1 : n * factorial.recursiveFunction (n - 1);

这将输出

120