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

[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
}
意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

  • 游客注册

    游客注册

  • 会员

    没有会员可显示

  • 最新的状态更新

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

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