Go斐波拉契数列(Fibonacci)(多种写法)

Posted fanbi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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都大约是这个时间量)

技术分享图片

说明:本质上尾递归就是迭代,只是写法略有差别

 

  

以上是关于Go斐波拉契数列(Fibonacci)(多种写法)的主要内容,如果未能解决你的问题,请参考以下文章

HDU1568 Fibonacci斐波拉契数列

斐波拉契数列(Fibonacci) 的python实现方式

《剑指offer》------斐波拉契数列

斐波拉契数列的递归非递归公式法多种方法实现

剑指offer面试题 10. 斐波那契数列

Fibonacci数列1