ventajas sintaxis programacion lambdas expresiones español aprender c++ recursion c++11 lambda

c++ - sintaxis - ¿Pueden las funciones lambda ser recursivas?



lambdas java (1)

Posible duplicado:
Funciones lambda recursivas en c ++ 0x

Aquí hay una vieja función recursiva simple:

int fak(int n) { return (n <= 1) ? 1 : n * fak(n - 1); }

¿Cómo escribiría una función tan recursiva como una función lambda?

[](int n) { return (n <= 1) ? 1 : n * operator()(n - 1); } // error: operator() not defined [](int n) { return (n <= 1) ? 1 : n * (*this)(n - 1); } // error: this wasn''t captured for this lambda function

¿Hay alguna expresión que denota la lambda actual para que pueda llamarse recursivamente?


Sí pueden. Puede almacenarlo en una variable y hacer referencia a esa variable (aunque no puede declarar el tipo de esa variable como auto , tendría que usar un objeto std::function lugar). Por ejemplo:

std::function<int (int)> factorial = [&] (int i) { return (i == 1) ? 1 : i * factorial(i - 1); };

De lo contrario, no, no puedes referir this puntero desde dentro del cuerpo de la lambda.