あらゆる処理系で可能かは定かではないが、Visual C++ では lambda を再帰的に定義できる。
#include <iostream>
#include <functional>
int main() {
// function<> で受けるのがキモ
std::function<int(int)> factorial =
[&](int n) { return n == 0 ? 1 : n * factorial(n-1); };
// ↑ factorialはlambdaの外なので & capture が必要
std::cout << factorial(5) << std::endl;
}