Недавно я узнал, что комбинатор с фиксированной точкой позволяет легко определять рекурсивные функции, не называя их.
Он в основном используется в языках функционального программирования (например, функция fix), но вы можете имитировать ее внешний вид в C++20 следующим образом:
Код: Выделить всё
#include
template
struct Fix {
F f;
decltype(auto) operator()(auto arg) {
return f(std::ref(*this), arg);
}
};
int main() {
auto fact = Fix{[](auto self, int n) -> int {
return (n
Подробнее здесь: [url]https://stackoverflow.com/questions/78213169/quickly-memoize-anonymous-recursive-functions-using-lambdas-and-the-fix-functio[/url]