[C++11]ラムダ式で再帰 |
2014年12月09日21:54:59 |
|
ラムダ式単独で再帰を表現できるのでサンプルコードをご紹介します。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include <cstdio>
#include <functional>
int main()
{
std::function<int(int)> factorial = [&factorial](int i) -> int
{
if( i == 1 )
{
return 1;
}
return i*factorial(i-1);
};
printf( "%d\n", factorial(5) );
return 0;
} |
出力:
120 |
ラムダ式単独で再帰が表現できて非常に便利ですね!
面白い点は、自分自身をキャプチャに指定できてしまう所だと思います。
注意点は、ラムダで再帰を行う際には型解決の問題でauto変数に代入出来ないので
必ずstd::functionを経由しなければならない点です。
autoにするとコンパイルエラーになります。
auto変数についての説明はこちら
[C++11]auto変数を使おう!ただし慎重に...
ラムダ式についての説明はこちら
[C++11]ラムダ式(無名関数、匿名関数)とstd::function |
|