development

람다 함수가 재귀적일 수 있습니까?

big-blog 2020. 9. 25. 08:05
반응형

람다 함수가 재귀적일 수 있습니까? [복제]


중복 가능성 :
C ++ 0x의 재귀 람다 함수

다음은 평범한 오래된 재귀 함수입니다.

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

람다 함수와 같은 재귀 함수를 어떻게 작성합니까?

[](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

재귀 적으로 자신을 호출 할 수 있도록 현재 람다를 나타내는 표현식이 있습니까?


네, 그들은 할 수 있어요. 변수에 저장하고 해당 변수를 참조 할 수 있습니다 (해당 변수의 유형을로 선언 할 수는 없지만 대신 객체 auto를 사용해야합니다 std::function). 예를 들면 :

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

그렇지 않으면 this람다 본문 내부에서 포인터를 참조 할 수 없습니다 .

참고 URL : https://stackoverflow.com/questions/14531993/can-lambda-functions-be-recursive

반응형