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都大约是这个时间量)
说明:本质上尾递归就是迭代,只是写法略有差别