Я понимаю ошибку прямого ссылки, но почему мне нужно пройти следующее: Определить n! ? Я прокомментировал ошибки и добавил ошибки компилятора, которые я вижу.Java 1.8 рекурсивный lambdas
import java.util.function.Function;
class Recursion {
Function<Integer, Integer> factorial_lambda = null;
int factorial_imp(int i) {
if (i == 1)
return 1;
else
return i * factorial_imp(i - 1);
}
/*
Function<Integer, Integer> factorial_lambda = (i) -> {
if (i == 1)
return 1;
else
return i * (factorial_lambda.apply(i - 1));
// error: self-reference in initializer
};
*/
public static void main(String[] args) { new Recursion(); }
public Recursion() {
/*
Function<Integer, Integer> factorial_lambda = (i) -> { return 1; };
// variable used in lambda expression should be final
// or effectively final;
// Function factorial_lambda = (i) -> { ...
//error: imcomparable types: Object and int if (i == 1)
//error: bad operand types for binary operator '-' apply(i - 1)
*/
factorial_lambda = (i) -> {
if (i == 1)
return 1;
else
return i * (factorial_lambda.apply(i - 1));
};
System.out.println(factorial_imp(5));
System.out.println(factorial_lambda.apply(5));
}
}
Он компилируется и работает правильно для меня. Какой компилятор вы используете? – kraskevich
Жаль об этом. Вопрос в том, почему различные фрагменты комментируемого кода не работают. Например, я не могу определить lambda factorial_lambda локально в рекурсии(). – Jerrolds