golang支持递归。
package main
import "fmt"
// fact函数调用自己直到fact(0)返回1
func fact(n int) int {
if n == 0 {
return 1
}
return n * fact(n-1)
}
func main() {
fmt.Println(fact(7))
// print
// 5040
// 匿名函数需要先声明再使用
var fib func(n int) int
fib = func(n int) int {
if n < 2 {
return n
}
return fib(n-1) + fib(n-2)
}
fmt.Println(fib(7))
// print
// 13
}
golang支持指针,可以传递引用。
package main
import "fmt"
// 展示了指针和值如何工作的,两个函数:zeroval和zeroptr。其中zeroval参数是int,所以传递值
// zeroval将拷贝ival参数,这个副本和调用函数的值不是同一个。
func zeroval(ival int) {
ival = 0
}
// zeroptr参数是*int,意味着需要传递指针。函数体中*iptr是获取指针指向内存中的值。
// 给*iptr赋予新的值,会改变对应地址的值。
func zeroptr(iptr *int) {
*iptr = 0
}
func main() {
i := 1
fmt.Println("initial:", i)
// print
// initial: 1
zeroval(i)
fmt.Println("zeroval:", i)
// print
// zeroval: 1
// &i语法表示i的地址,也就是i的指针。值被改了。
zeroptr(&i)
fmt.Println("zeroptr:", i)
// print
// zeroptr: 0
// 指针也可以打印
fmt.Println("pointer:", &i)
// print
// pointer: 0xc0000a6058
}
本文介绍了Golang语言中递归函数的实现,如`fact`函数,以及指针在函数中的使用,通过`zeroval`和`zeroptr`函数展示了值传递和指针传递的区别。
355

被折叠的 条评论
为什么被折叠?



