关于斐波那契数列例题的疑惑

来源:2-2 函数式编程例一

Morin110

2021-06-15 16:42:58

func fibonacci() func() int {
a,b :=0,1
  return func() int {
a,b = b,a+b
return a
}
}
f:= fibonacci()
fmt.Println(f())//1
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())
fmt.Println(f())

不明白的是为什么a,b的值会一直往上加。不是应该函数执行完了就没了,下次再执行又是0,1吗

写回答

1回答

NiKo_Chan

2021-06-15

这个斐波那契数列主要是为了给闭包举例,当形成闭包之后,a和b会一直在内存里

0
hcmouse
回复
horin110
hp>执行完不会立刻没有,正像winnielovegood说的那样,a和b会一直在内存里。他们会和函数指针打包在一起,形成一个“闭包”。闭包释放的时机取决于垃圾回收器,就像其他struct回收的机制一样。

这里我们main函数引用了f函数,所以在main函数释放之前f函数不会被垃圾回收。

h021-06-18
共2条回复

0 学习 · 1399 问题

查看课程