首页 > 其他分享 >Go - Fibonacci

Go - Fibonacci

时间:2023-09-18 20:55:24浏览次数:33  
标签:Case testing expected result func Go tc Fibonacci

fibonacci.go

package algorithms

// Dynamic Programming
func Fibonacci1(n int) int {
    if n <= 0 {
        return 0
    }
    if n <= 2 {
        return 1
    }

    previous1 := 1
    previous2 := 1
    currentVal := 0
    for i := 3; i <= n; i++ {
        currentVal = previous1 + previous2
        previous1 = previous2
        previous2 = currentVal
    }
    return currentVal
}

var store = map[int]int{
    1: 1,
    2: 1,
}

func Fibonacci2(n int) int {
    if n <= 0 {
        return 0
    }

    if store[n] != 0 {
        return store[n]
    }

    val := Fibonacci2(n-2) + Fibonacci2(n-1)
    store[n] = val
    return val
}

 

setup_test.go

package algorithms

type TestCase struct {
    name     string
    input    any
    expected any
}

 

fibonacci_test.go

package algorithms

import "testing"

func BenchmarkFibonacci1(b *testing.B) {
    for i := 0; i < 100000; i++ {
        _ = Fibonacci1(i)
    }
}

func BenchmarkFibonacci2(b *testing.B) {
    for i := 0; i < 100000; i++ {
        _ = Fibonacci2(i)
    }
}

var fibo_tests = []TestCase{
    {"Case 1", 0, 0},
    {"Case 2", 2, 1},
    {"Case 3", 3, 2},
    {"Case 4", 4, 3},
    {"Case 5", 5, 5},
    {"Case 6", 6, 8},
    {"Case 7", 7, 13},
}

func TestFibonacci1(t *testing.T) {
    for _, tc := range fibo_tests {
        result := Fibonacci1(tc.input.(int))
        if result != tc.expected {
            t.Errorf("%s failed. Input: %v Output: %v Expected: %v", tc.name, tc.input, result, tc.expected)
        }
    }
}

func TestFibonacci2(t *testing.T) {
    for _, tc := range fibo_tests {
        result := Fibonacci2(tc.input.(int))
        if result != tc.expected {
            t.Errorf("%s failed. Input: %v Output: %v Expected: %v", tc.name, tc.input, result, tc.expected)
        }
    }
}

 

Performance comparison:

 

标签:Case,testing,expected,result,func,Go,tc,Fibonacci
From: https://www.cnblogs.com/zhangzhihui/p/17713032.html

相关文章

  • Go每日一库之13:email
    简介程序中时常有发送邮件的需求。有异常情况了需要通知管理员和负责人,用户下单后可能需要通知订单信息,电商平台、中国移动和联通都有每月账单,这些都可以通过邮件来推送。还有我们平时收到的垃圾邮件大都也是通过这种方式发送的......
  • RunnerGo:一款全栈测试平台
    做软件测试的同学在工作时应该都碰到过这种情况:接口管理、接口测试用postman、Apipost等接口管理工具,性能测试用jmeter、loadrunner等性能测试工具,接口自动化则是jmeter脚本或者python脚本配合jenkins使用。这种情况极大的降低了研发效率,今天给大家推荐一款入选GiteeGVP的开源测......
  • Go比Python快多少倍?请看一个简单的例子
    需求两个0-10000的数组,循环遍历两个数组,获取两个元素,打印出乘积为56213的所有元素Python实现importdatetimes=datetime.datetime.now()foriinrange(10000):forjinrange(10000):ifi*j==56213:print(f"{i}*{......
  • golang fyne 添加系统托盘
    环境:gofyne 要求:电脑右下方添加系统托盘,点击图标显示托盘菜单效果:实现:1packagemain23import(4"fyne.io/fyne/v2"5"fyne.io/fyne/v2/app"6"fyne.io/fyne/v2/widget"7"fyne.io/fyne/v2/driver/desktop"8&......
  • Django如何http接收+返回docx文件,文件名中文
     fromdjango.utils.encodingimportescape_uri_pathfromdjango.httpimportHttpResponse view中函数:filepath="文件路径"withopen(filepath,'rb')asf:content=f.read()response=HttpResponse(conte......
  • golang fyne 创建两个窗口,窗口居中。点击按钮显示第二个窗口 myApp.NewWindow("new")
    环境:gofyne实现:在窗口的按钮中,点击按钮弹出第二窗口,并且窗口居中注意:创建的第一个窗口和第二个窗口必须是通过同一个myApp:=app.New()创建出来的效果:实现:1packagemain23import(4"fmt"56"fyne.io/fyne/v2"7"fyne.io/fyne/v2/app"8......
  • Django框架高级之DRF部分源码分析
    【一】DRF之请求执行流程和APIView源码分析【二】DRF之Request源码分析【三】DRF之Response源码分析【四】DRF之登录认证源码分析......
  • Goland 断点调试Debug的操作
    第一步:进入编辑模式第二步:开始进行编辑第三步:就可以进行调式了......
  • Windows和Linux下通过go实现自删除
    自删除在攻防中都挺常见的,自写远控通常也有需要。可是在度娘里搜不到什么办法,于是就查查Windowsapi学习记录一回。linux先获得当前程序的文件名,再使用syscall这个包中的Unlink调用系统来删除一个目录或者文件的链接,链接没了也就删除完成了。fileName,_:=os.Executable()......
  • Google Chrome 自动更新 关闭
    更新日期:SatSep03202220:20:00GMT+0800,阅读量:10847请访问原文链接:如何禁用GoogleChrome自动更新(macOS,Linux,Windows),查看最新版。原创作品,转载请保留出处。作者主页:sysin.org禁用浏览器自动更新系列文章:如何禁用Firefox自动更新(macOS,Linux,Windows)......