はじめに C++において,ラムダで再帰したいと考えることはたまにある. この記事ではラムダで再帰する手法をいくつか紹介する. 例として扱う再帰関数はフィボナッチ数列の関数(もっとも単純な実装)とする. int fib(int n) noexcept { return n < 2 ? n : (fib(n - 1) + fib(n - 2)); } 生成コード ラムダで再帰を行いたいと考えるのは変数のキャプチャをしつつ再帰をしたい場面であると思う. 例えば,メモ化再帰を行うと考えた場合, グローバル変数としてメモ化配列を用意する メモ化再帰用のクラスを用意する(メンバにメモ化配列を用意する) 再帰関数の引数にメモ化配列を与える といった方法が考えられるが,グローバル変数や専用のクラス定義が必要であり,あまりやりたくない. 引数にメモ化配列を与えるとなると,全ての再帰呼び出し箇所の記述が冗長に
![C++のラムダで再帰する - koturnの日記](https://cdn-ak-scissors.b.st-hatena.com/image/square/98eb8f0aef7a9e300aa67c211a5d678406bad3b0/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fk%2Fkoturn%2F20180621%2F20180621043652.png)