今天写算法题时无意间遇到一种情况,我的深度优先遍历函数要在函数内调用自身,如果是普通函数没什么问题,但如果是 匿名函数 的话会有一些问题,甚至问ai,ai也没打上来,上网搜了半天,才找到这个的解答,故作此文
以费契那波数列为例
// 普通函数式
int fun(int pos) {if (pos == 1 || pos == 2){return 1;}else {return fun(pos - 1) + fun(pos - 2);}
}
int main() {// 匿名函数式auto lam_fun = [](int pos) {if (pos == 1 || pos == 2){return 1;}else {return lam_fun(pos - 1) + lam_fun(pos - 2); // 请注意此处报错}};
}
请注意在到数第四行会有报错
我去问ai,ai给了这样一个答案
请注意上面这份代码也是错的!
[&] 这个代码表示,以引用的方式捕获当前环境的变量到匿名函数中去,翻译成人话就是,匿名函数里不需要传参也能以引用的方式访问外面的变量.
[&] 可以捕获除了匿名函数本身以外的全部变量
解决方案
把匿名函数自己当成参数传到匿名函数中
lam_fun和fun不可重名,因为不知道类型,所以定为auto
auto lam_fun = [](int pos,auto& fun) {if (pos == 1 || pos == 2){return 1;}else {return fun(pos - 1,fun) + fun(pos - 2,fun); // 请注意此处报错}};lam_fun(3,lam_fun);