golang入门到放弃:2.匿名函数、闭包、递归函数

2020-07-06  本文已影响0人  不留余白

匿名函数

Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用。

func main() {
    a:=10
    b:=5
    //将闭包函数类型赋值给f
    f:=func (c int,d int)int {
        return c+d
    }
    fmt.Println(f(a,b))//15
    fmt.Printf("%T",f,)//func(int, int) int
    fmt.Printf("%T",f(a,b))//int
}
func main() {

   //函数调用 将test2的返回值给f
   f1:=test12()
   //fmt.Printf("%T",f1)
   for i:=5;i<=10 ;i++  {
      fmt.Println(f1())
   }
}

//可以通过匿名函数和闭包 实现函数在栈区的本地化
func test12()  func()int{
   a:=10
   fmt.Printf("init=%d\n",a)
   return func() int{
       a++
      return a
   }
}

输出

init=10
11
12
13
14
15
16
func main() {
   a := 10
   for i := 5; i <= 10; i++ {
      func() int {
         a++
         fmt.Println(a)
         return  a
      }()
   }
}

输出

11
12
13
14
15
16

递归

计算n的阶乘

func main(){
   jiecheng(4) //4*3*2*1=24
 fmt.Println(sum)
}

var sum int =1
func jiecheng(n int)int{
   if n==1{
      return sum
   }
   sum*=n
   return jiecheng(n-1)
}
上一篇下一篇

猜你喜欢

热点阅读