-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
采用迭代的算法,来计算斐波那契函数,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 内存设计是为了嵌入式、实时操作系统。内存做了约束。不适合递归算法。