Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          lambda-expressions/lambda2.cc - Lambda expressions and recursive calls.Lecture 3 - slide 2 : 27
Program 4

// Recursive lambdas

#include <iostream>     
#include <string>
#include <functional>   // std::function

int main () {
  using namespace std;

  auto fac1 = [&](int i){                     // Error: auto cannot be used.
    return i <= 0 ? 1 : i * fac1(i - 1);      // Cannot deduce the type of the function.
  };  

  function<int(int)>fac2 = [&fac2](int i){    // Use the function<R(A)> type specifier.
    return i <= 0 ? 1 : i * fac2(i - 1);      // Now the type of the lambda does not need to be deduced.
  };                                          // The capture is crucial in order to capture fac2.
  
  cout << "fac2(5): " << fac2(5) << endl;     // fac2(5): 120

}