go example 16-17: Recursion & Pointers

本文介绍了Golang语言中递归函数的实现,如`fact`函数,以及指针在函数中的使用,通过`zeroval`和`zeroptr`函数展示了值传递和指针传递的区别。

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
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值