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

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

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

登陆购买课程后可参与讨论,去登陆

1回答
NiKo_Chan 2021-06-15 17:10:53

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

  • 提问者 Morin110 #1

    ​执行

    f:= fibonacci()

    的时候相当于把函数返回值的指针给了f。下面每次调用f()都是相当于执行的f指针指向的函数内存里的变量吗?那这个f什么时候会释放

    2021-06-15 17:17:05
  • ccmouse 回复 提问者 Morin110 #2

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

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

    2021-06-18 16:33:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师