반응형
람다 함수가 재귀적일 수 있습니까? [복제]
중복 가능성 :
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
반응형
'development' 카테고리의 다른 글
데이터베이스가 항상 실린더로 표시되는 이유는 무엇입니까? (0) | 2020.09.25 |
---|---|
브라우저에서 : before 및 : after 가상 요소를 어떻게 검사하고 조정할 수 있습니까? (0) | 2020.09.25 |
Vim에서 리팩토링 (0) | 2020.09.25 |
BackgroundWorker에 대한 작업 병렬 라이브러리 대체? (0) | 2020.09.25 |
NSParameterAssert 란 무엇입니까? (0) | 2020.09.25 |