首页 > 其他 > 详细

斐波那契数列实现

时间:2020-07-30 20:50:54      阅读:66      评论:0      收藏:0      [点我收藏+]

技术分享图片

注意事项:

  1. 百科给出的解释是F(1)=1, F(2)=1,不是F(1)=0, F(2)=1
  2. 最好定义为int64类型,避免数据过大而异常
  3. 为了精确显示测试时间,统一用纳秒,转换单位前注意转换为float64类型,否则可能只显示0
package main
import (
        "fmt"
        "time"
)
// 方法一:递归
func Fibonacci1(n int64) int64 {
        if n == 0 || n == 1 {
                return n
        } else if n > 1{
                return Fibonacci1(n-2) + Fibonacci1(n-1)
        } else {
                fmt.Println("输入错误,请重新输入!")
                return 0
        }
}
// 方法二:利用中间值传递循环,效率更高
func Fibonacci2(n int64) int64 {
        if n == 0 || n == 1 {
                return n
        } else if n > 1 {
                var first int64 = 0
                var second int64 = 1
                var i int64
                var sum int64
                for i = 1; i <= n-1; i++ {
                        sum = first + second
                        first = second
                        second = sum
                }
                return second
        } else {
                fmt.Println("输入错误,请重新输入!")
                return 0
        }
}

func main() {
        var n int64

        fmt.Println("请输入序列号n: ")
        fmt.Scanln(&n)
		
    	//测试时间
        beginTime1 := time.Now().UnixNano()
        fmt.Println("result1=",Fibonacci1(n))
        endTime1 := time.Now().UnixNano()
        costTime1 := endTime1 - beginTime1
        fmt.Printf("测试函数1花费时间costTime1=%v秒\n",float64(costTime1)/1000000000)

        beginTime2 := time.Now().UnixNano()
        fmt.Println("result2=",Fibonacci2(n))
        endTime2 := time.Now().UnixNano()
        costTime2 := endTime2 - beginTime2
        fmt.Printf("测试函数2花费时间costTime2=%v秒",float64(costTime2)/1000000000)

        fmt.Println()
}

斐波那契数列实现

原文:https://www.cnblogs.com/levin-ling/p/13405598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!