为什么我不能将递归函数定义为变量?我似乎能够定义任意函数,除非它们递归。这是合法的:func f(i int) int { if i == 0 { return 1 } return i * f(i-1)}func main() { fmt.Println(f(2))}这是非法的:var f func(int) int = func(i int) int { if i == 0 { return 1 } return i * f(i-1)}func main() { fmt.Println(f(2))}这是合法的,我猜这只是因为您可以在初始化后计算出 f :func main() { var f *func(int) int; t := func(i int) int { if i == 0 { return 1 } return i * (*f)(i-1) } f = &t fmt.Println((*f)(2))}所以看起来它归结为函数类型的函数和变量声明被区别对待,尽管从阅读文档中我不希望是这种情况。我是否错过了详细说明这一点的文档部分?我希望非法案例能够工作,因为它适用于其他语言。就像在 JavaScript 中一样:(function () { var f = function (i) { if (i == 0) { return 1; } return i * f(i - 1); }; console.log(f(2));})();
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
下面的代码将是执行您所描述的操作的首选方式。请注意,您不必创建额外的变量,也没有指向函数的指针:
package main
import "fmt"
func main() {
var f func(int) int
f = func(i int) int {
if i == 0 {
return 1
}
return i * f(i-1)
}
fmt.Println(f(2))
}
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消