1. 程式人生 > >Go斐波拉契數列(Fibonacci)(多種寫法)

Go斐波拉契數列(Fibonacci)(多種寫法)

1 前言

斐波拉契數列有遞迴寫法和尾遞迴和迭代寫法。

2 程式碼

//recursion
func fib(n int) int{
	if n < 2{
		return n
	}else{
		return fib(n-1) + fib(n-2)
	}

}

func fibcore(n int) (int,int){
	if n < 2{
		return 0,n
	}else{
		a,b := fibcore(n-1)
		return b,a+b
	}

}

//tail recursion
func fib2(n int)(int){
	_,b:= fibcore(n)
	return b
}

//iteration 
func fib3(max int)(int){
	n:=0
	a,b:=0,1
	for {
		if n < max{
			a,b = b,a+b
			n ++
		}else{
			break
		}
	}
	return b
}

3 效能分析

測試第40個的數列值

遞迴

尾遞迴(引數是40,100都大約是這個時間量)

迭代(引數是40,100都大約是這個時間量)

說明:本質上尾遞迴就是迭代,只是寫法略有差別