C++プログラマ キャスブログ
[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> // printfに必要なヘッダー #include <functional> //std::functionに必要なヘッダー 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
カテゴリ

リンク
C++11のコードを
試すのに便利です。
http://ideone.com/

同人ゲームを
製作している知人
sorcery

にほんブログ村 IT技術ブログ C/C++へ
にほんブログ村


C++ ブログランキングへ