Skip to content

benchmark #1

@Mark24Code

Description

@Mark24Code

采用迭代的算法,来计算斐波那契函数,n=40(巨大耗时)

package main

import "fmt"

// 迭代方法计算斐波那契数列的第n项
func fib(n int) int {
  // 基本情况:当n为0或1时,直接返回n
  if n <= 1 {
    return n
  }

  // 初始化前两项
  a, b := 0, 1

  // 迭代计算后续项
  for i := 2; i <= n; i++ {
    a, b = b, a+b // 将a更新为b,b更新为a+b
  }

  // 返回第n项
  return b
}

func main() {
  // 测试fib函数
  fmt.Println(fib(40)) // 应该输出55,因为F(10)是斐波那契数列的第10项
}

Ruby

def fib(n)
  return n if n <= 1

  # 创建一个数组来存储斐波那契数
  fib_sequence = [0, 1] + Array.new(n - 1)

  # 填充数组
  (2..n).each do |i|
    fib_sequence[i] = fib_sequence[i - 1] + fib_sequence[i - 2]
  end

  # 返回所需的斐波那契数
  fib_sequence[n]
end

# 测试函数
puts fib(40) # 应该输出55



# def fib(n)
#   if n < 2
#     n
#   else
#     fib(n-2) + fib(n-1)
#   end
# end

# puts fib(40)

结果:

go version go1.21.3 darwin/arm64

➜  go-test time go run fib2.go
102334155
go run fib2.go  0.09s user 0.12s system 108% cpu 0.197 total
➜  go-test time go run fib2.go
➜  go-test go build fib2.go
➜  go-test time ./fib2
102334155
./fib2  0.00s user 0.00s system 71% cpu 0.009 total

mruby 3.3.0

➜  mruby-devkit git:(main) ✗ rake 'build[fib.rb]'
rm -rf build && mkdir build
compiler/mruby-3.3.0/build/host/bin/mrbc -B__ruby_code src/fib.rb
mv ./src/fib.c ./build/
gcc-14 -std=c99 -I./compiler/mruby-3.3.0/build/host/include ./build/_wrapper.c -o ./build/fib ./compiler/mruby-3.3.0/build/host/lib/libmruby.a -lm
rm ./build/fib.c && rm ./build/_wrapper.c
➜  mruby-devkit git:(main) ✗ clear
➜  mruby-devkit git:(main) ✗ time ./build/fib
102334155
./build/fib  0.00s user 0.00s system 72% cpu 0.009 total

打成平手。mruby 快于 go run

mruby 内存设计是为了嵌入式、实时操作系统。内存做了约束。不适合递归算法。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions