跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[Go 编程语言] 关于 Go 递归性能的疑问


已推荐帖子

发表于

OP 是 Go 语言初学者,学到递归这里实现斐波那契数列的计算,看到的资料都说 Go 没有对尾递归做优化,但是我用尾递归的方式测试之后,发现性能会比最原始的递归方式强非常多,这是什么原因呢?

package main

import (
	"fmt"
	"time"
)

func fibonacciTailRecursive(n int, a int, b int) int {
	if n == 0 {
		return a
	}
	return fibonacciTailRecursive(n-1, b, a+b)
}

func fib(n int) int {
	if n <= 1 {
		return n
	}
	return fib(n-1) + fib(n-2)
}
func fib1(n int) int {
	return fibonacciTailRecursive(n, 0, 1)
}

func main() {
	n := 40
	start := time.Now()
	result := fib(n)
	duration := time.Since(start)
	fmt.Println(result, duration) // 常规的递归结果 102334155 394.601829ms

	start = time.Now()
	result = fib1(n)
	duration = time.Since(start)
	fmt.Println(result, duration) // 使用尾递归结果 102334155 90ns
}
  • 游客注册

    游客注册

  • 会员

    没有会员可显示

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...