C++lambda递归斐波那契
时间: 2023-10-04 10:06:49 浏览: 98
C++ lambda表达式可以通过使用递归来实现斐波那契数列。通过在lambda表达式内部使用捕获列表和mutable指示符,我们可以在lambda表达式中引入变量,并在每次调用时更新它们的值。
下面是一个示例代码:
```cpp
#include <iostream>
#include <utility>
using namespace std;
int main() {
auto fib = [a = 0, b = 1]() mutable {
a = exchange(b, a + b);
return a;
};
for(int i = 0; i < 10; i++) {
cout << fib() << endl;
}
}
```
代码说明:
- `fib` 是一个lambda表达式,它生成斐波那契数列。每次调用 `fib` 都会生成下一个斐波那契数。
- `[a = 0, b = 1]` 是捕获列表,通过通用值捕获方式引入了变量 `a` 和 `b` 并给它们赋初值。
- `a = exchange(b, a + b)` 是斐波那契数列生成的部分。这行代码将 `a + b` 的值赋给 `b`,然后将 `b` 原有的值赋给 `a`。可以理解为 `auto temp = b; b = a + b; a = temp;`。
- `mutable` 指示符是必需的,否则在lambda表达式函数体内,通用值捕获所得到的变量 `a` 和 `b` 将不能被修改。
回答完问题后,我还可以为您提供一些
阅读全文