49.笔记go语言——实现斐波那契

来源:互联网 发布:knn算法matlab 编辑:程序博客网 时间:2024/05/22 17:25

49.笔记go语言——实现斐波那契

代码

实现代码如下:

package main

import "fmt"

// fibonacci 函数会返回一个返回 int的函数。

func fibonacci() func()int {

        var a int = 1

        var b int = 1

       

        return func() int {

               c := a+b

               a = b

               b = c

               return c

        }

}

 

func main() {

        f := fibonacci()

        for i := 0; i < 10; i++ {

               fmt.Println(f())

        }

}

执行

2

           3

           5

           8

           13

           21

           34

           55

           89

           144

关于闭包

当不希望给函数起名字的时候,可以使用匿名函数,例如:func(x, y int) int { return x + y }

下面是一个计算从 1 到 1 百万整数的总和的匿名函数:

func() {

   sum = 0.0

   for i := 1; i <= 1e6; i++ {

       sum += i

    }

}()

表示参数列表的第一对括号必须紧挨着关键字 func,因为匿名函数没有名称。花括号 {} 涵盖着函数体,最后的一对括号表示对该匿名函数的调用。

下面的例子展示了如何将匿名函数赋值给变量并对其进行调用:

package main

import "fmt"

func main() {

    f()

}

func f() {

    for i := 0;i < 4; i++ {

        g :=func(i int) { fmt.Printf("%d ", i) } //此例子中只是为了演示匿名函数可分配不同的内存地址,在现实开发中,不应该把该部分信息放置到循环中。

        g(i)

       fmt.Printf(" - g is of type %T and has value %v\n", g, g)

    }

}

输出:

           0  - g is of type func(int) and has value0x401180

           1  - g is of type func(int) and has value0x401180

           2  - g is of type func(int) and has value0x401180

           3  - g is of type func(int) and has value0x401180

那么什么是闭包:

闭包函数出现的条件:

1.被嵌套的函数引用到非本函数的外部变量,而且这外部变量不是“全局变量”

2.嵌套的函数被独立了出来(被父函数返回或赋值 变成了独立的个体),

  而被引用的变量所在的父函数已结束

PS:对象是附有行为的数据,而闭包是附有数据的行为。

 

 

 

 

 

 

 

 

原创粉丝点击