フィボナッチ数を求める関数をC++で継続渡しで書いてみる足掻き
再帰の練習長6+をみて、C++で書いてみたいと思い、やってみた。
これも翻訳しているに過ぎないのだけど。
#include <iostream> #include <functional> #include <boost/function.hpp> #include <boost/bind.hpp> #include <boost/lambda/lambda.hpp> namespace { // 継続渡しでフィボナッチ数を求める int FibonacciCps(int n, boost::function<int(int)> cont) { return (n==1 || n==2) ? cont(1) : FibonacciCps( n-1, boost::bind( FibonacciCps, n-2, boost::bind( cont, boost::bind(std::plus<int>(), _1, _2)))); } } int main() { // フィボナッチ数を求めてみる std::cout << "FibonacciCps(10) = " << FibonacciCps(10, boost::lambda::_1) << std::endl; return 0; }
うーん、うまくいかん。何がダメなんだろう?
理解もできてないし、翻訳もできてないじゃん!><