第 8 節:函式-匿名函式、遞迴函式

kuibatian發表於2019-11-26

8: 08匿名函式

package main

import "fmt"

type FuncType func(int, int)

func main0801() {

    a := 10
    b := 20

    //在函式內部定義一個匿名函式
    //f 函式型別變數 接收函式

    var f FuncType

    f = func(a int, b int) {
        fmt.Println(a + b)
    }

    f(a, b)
    //fmt.Println(f)

}
func main0802() {
    //a := 10
    //b := 20
    // int型別
    //v := func(a int, b int) int {
    //  return a + b
    //}(a, b)

    //如果定義匿名函式後在{}後面如果有()表示函式呼叫
    f := func(a int, b int) int {
        return a + b
    }

    v := f(10, 20)
    fmt.Printf("%T\n", f)
    fmt.Println(v)
}
func main0803() {
    a := 10
    b := 20

    f := func() int {
        return a + b
    }

    //v := f(a, b)

    a = 100
    b = 200

    v := f()

    fmt.Println(v)
}

9: 09遞迴函式

package main

import "fmt"

//遞迴函式  函式呼叫函式本身
//死遞迴
func demo4(n int) {

    //在函式中遇到return 表示函式的結束
    if n == 0 {
        return
    }

    demo4(n - 1)
    fmt.Println(n)
}

func main0901() {

    demo4(10)

}

//計算一個數的階乘
var s int = 1

func demo5(n int) {
    if n == 1 {
        return
    }
    s *= n//5*4*3*2
    demo5(n - 1)

}

func main() {

    a := 5
    demo5(a)

    fmt.Println(s)

}

相關文章