golang实现斐波那契数列算法

£可爱£侵袭症+ 提交于 2020-02-26 06:32:39
//斐波那契数列格式为:1、1、2、3、5、8、13、21、34、......,n=1和n=2的时候都是输出1
//也可以用递归 公式: fn(n-1)+fn(n-2)
package alg

import (
	"fmt"
)

func main() {
	fmt.Printf("%d \n", fibs(10))
}

func fibs(num int) int {
	if num == 1 || num == 2 {
		return 1
	}

	var n1, n2 int = 1, 2
	n3 := 0
	for i := 2; i <= num; i++ {
		n3 = n1 + n2 //第三个数等于第一个数加上第二个数
		n1 = n2 //第一个数等于第二个数
		n2 = n3 //第二个数等于第三个数
	}

	return n3
}


//第二种思路 利用内存缓存实现,没测试那种效率高 github上面看到的一段实现
package main

import (
	"fmt"
	"time"
)

const LIM = 41

var fibs \[LIM\]uint64

func main() {
	var result uint64 = 0
	start := time.Now()
	for i := 0; i < LIM; i++ {
		result = fibonacci(i)
		fmt.Printf("fibonacci(%d) is: %d\\n", i, result)
	}
	end := time.Now()
	delta := end.Sub(start)
	fmt.Printf("longCalculation took this amount of time: %s\\n", delta)
}
func fibonacci(n int) (res uint64) {
	// memoization: check if fibonacci(n) is already known in array:
	if fibs\[n\] != 0 {
		res = fibs\[n\]
		return
	}
	if n <= 1 {
		res = 1
	} else {
		res = fibonacci(n-1) + fibonacci(n-2)
	}
	fibs\[n\] = res
	return
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!