練習 6.4
重寫本節中生成斐波那契數列的程序並返回兩個命名返回值(詳見第 6.2 節),即數列中的位置和對應的值,例如 5 與 4,89 與 10。
func fibonacci(n int) (index int,value int ) { index = n if n <= 1 { value = 1 } else { _,value0 := fibonacci(n-1) _,value1 := fibonacci(n-2) value = value0 + value1 } return }
練習 6.6
實現一個輸出前 30 個整數的階乘的程序。
n! 的階乘定義為:n! = n * (n-1)!, 0! = 1
,因此它非常適合使用遞歸函數來實現。
func iterCount(num int ,count *big.Int) *big.Int{ if num<=1 || count.Int64() == 1{ return big.NewInt(1) }else{ return count.Mul(count,iterCount(num-1,big.NewInt(count.Int64()-1))) } }
練習 6.8 在 main 函數中寫一個用於打印 Hello World
字符串的匿名函數並賦值給變量 fv
,然后調用該函數並打印變量 fv
的類型。
fv := func(){
fmt.Println("Hello world")
}
fv()
fmt.Println(reflect.TypeOf(fv))
練習 6.10
學習並理解以下程序的工作原理:https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.9.md
練習 7.4: fobinacci_funcarray.go: 為練習 7.3 寫一個新的版本,主函數調用一個使用序列個數作為參數的函數,該函數返回一個大小為序列個數的 Fibonacci 切片。
func fibonacci(fibs []uint64,n int) uint64 { if n<= 1{ fibs[n]=1 } else { fibs[n] = fibonacci(fibs,n-1) + fibonacci(fibs,n-2) } return fibs[n] }
問題 7.3 給定 s := make([]byte, 5)
,len(s) 和 cap(s) 分別是多少?s = s[2:4]
,len(s) 和 cap(s) 又分別是多少?
2 ;3
https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md
今日總結
今天主要學習了go的控制結構,函數,切片/數組,算是把幾個總要的知識點過了一遍,然后把比較有意思的題目放上來做一個記錄