go语言的闭包是个好东西,但是最近用匿名函数递归时踩了个小坑,下面的函数运行时报’dfs’ is not defined
dfs := func (pos, cnt int) {
if cnt == k {
if pos == n - 1 {
ans++
}
return
}
for i := 0; i < n; i++ {
if mp[pos][i] {
dfs(i, cnt + 1)
}
}
}
研究了一下后发现当匿名函数需要被递归调用时,必须首先声明一个变量,再将匿名函数赋值给这个变量。否则函数字面量无法与变量绑定,我们也无法递归调用该匿名函数。改成下面这样就没有问题了
var dfs func(pos, cnt int)
dfs = func (pos, cnt int) {
if cnt == k {
if pos == n - 1 {
ans++
}
return
}
for i := 0; i < n; i++ {
if mp[pos][i] {
dfs(i, cnt + 1)
}
}
}