import java.util.function.Function;

class recursion {
    int factorial_imp(int i){
        if (i==1)
            return 1;
        else
            return i*factorial_imp(i-1);
    }
/*
    Function<Integer,Integer>  factorial_lambda3=(i)->{
        if (i==1)        return 1;
        else return i*(factorial_lambda3.apply(i-1));  
    };       //error self-reference in initializer                                         
    int n=n+1;//error self-reference in initializer
*/

    Function<Integer,Integer> factorial_lambda=(i)->1;
    int n=1;
    public static void main(String[] args) { new recursion();}

    public recursion() {  
        factorial_lambda=(i)->{
            if (i==1)
                return 1;
            else
                return i*(factorial_lambda.apply(i-1));
        };
        n=n+1;
        System.out.println(n);
        System.out.println(factorial_imp(5));
        System.out.println(factorial_lambda.apply(5));
    }
}

A Run


2
120
120