函数闭包递归的问题。
来源:7-1 函数式编程

慕圣3495826
2018-03-15
func adder() func(int) int {
sum := 0
return func(v int) int {
sum += v
return sum
}
}
a := adder()
a 是 func(int) int 的函数。
当调用a(2) 时候,具体递推执行逻辑是怎么样的? 我感觉 a(2) 是 0+2 返回2。
写回答
4回答
-
ccmouse
2018-03-16
第一次调用a(2),的确返回2。但第二次调用,a作为闭包,它里面的sum已经变了。因此第二次调用a(2),结果为4。当然,必须使用同一个a。如果你又用a=adder(),那又从0开始
142019-09-08 -
aZhuang
2021-03-31
这不是递归
你可以把a理解成一个对象,这个对象有一个属性sum, sum的初值是0, 当调用a(1)时 sum是sum+ 1,当调用a(2)时 sum是0 + sum + 2,
00 -
qq_白澤_0
2020-08-13
可以理解为此处闭包的目的是为了每次将sum存起来,也就是将函数adder()赋值给a作为一个变量的目的。相当于这个状态是保存在a里的。所以每次调用a(i)的话实际上a的sum是上次结束更改后的值。而adder()函数的目的是计算上的处理,实际的值由a决定。
00 -
ccmouse
2018-03-16
我的课上是先a(1),然后sum变1,然后再a(2),因此返回3
00
相似问题