练习 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的控制结构,函数,切片/数组,算是把几个总要的知识点过了一遍,然后把比较有意思的题目放上来做一个记录