C++ lambda表达式函数递归调用简单写法实现

在C++11中,lambda表达式函数递归往往会带上<functional>头文件。书写形式如下:

c++ 复制代码
    function<int(int)> fib = [&fib] (int n) {
        if(n <= 2) return 1;
        else return fib(n-1) + fib(n-2);
    };
	cout<<fib(5);

还有相对简单点的第二种写法(C++14):

c++ 复制代码
    auto fib = [](auto && fib, int n)  -> int {
        if(n <= 2) return 1;
        else return fib(fib, n - 1) + fib(fib, n - 2);
    };
    cout<<fib(fib,5);

对于第二种,auto && fib的作用是为了在 lambda 表达式内部能够递归调用自身。在 C++14 中,lambda 表达式默认是无法直接递归调用的,因为在 lambda 内部无法访问到自身的定义。

使用 auto &&fib 的方式,实际上是将递归函数对象传递给 lambda 表达式本身,通过递归调用传递进来的函数对象来实现递归。

具体原理是这样的:

  1. auto &&fib 定义了一个右值引用类型的函数对象,这个函数对象被称为 fib
  2. 在 lambda 表达式内部,fib 可以被直接调用,因为它是一个函数对象。
  3. 在递归调用时,fib 会被传递给自身,从而完成对自身的递归调用。

这种技巧可以绕过对 lambda 表达式递归调用的限制,实现了在 lambda 表达式内部递归调用自身的需求。

(7条消息) C++ 实现lambda递归调用(C++11 - C++23)_c++ lambda 递归_J__M__C的博客-CSDN博客

chatGPT

相关推荐
Ekehlaft2 分钟前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
rit84324995 分钟前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
开源技术7 分钟前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python
Cult Of11 分钟前
Alicea Wind的个人网站开发日志(2)
开发语言·python·vue
我找到地球的支点啦16 分钟前
通信扩展——扩频技术(超级详细,附带Matlab代码)
开发语言·matlab
liu****32 分钟前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
微小冷35 分钟前
Rust异步编程详解
开发语言·rust·async·await·异步编程·tokio
A9better39 分钟前
C++——不一样的I/O工具与名称空间
开发语言·c++·学习
清水白石00842 分钟前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python
杜子不疼.43 分钟前
Ascend_C自定义算子开发
c语言·开发语言