码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-27 11:14:00      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:csharp   har   本质   break   性能分析   nbsp   for   a+b   arp   

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)(多种写法)

标签:csharp   har   本质   break   性能分析   nbsp   for   a+b   arp   

原文地址:https://www.cnblogs.com/fanbi/p/10024788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!