欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 【go从零单排】递归函数Recursive Functions和斐波那契数列

【go从零单排】递归函数Recursive Functions和斐波那契数列

2025/5/19 8:30:25 来源:https://blog.csdn.net/qq_42476938/article/details/143587338  浏览:    关键词:【go从零单排】递归函数Recursive Functions和斐波那契数列

挪威特罗姆瑟夜景

Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

递归函数

这个单词很有意思:Recursive是递归,是cursive诅咒,这个概念提出时设计者就考虑到如果不合理的使用递归将会将会导致不幸。–谐音梗扣钱

package mainimport "fmt"// 函数fact 输入一个int类型,返回一个int类型
func fact(n int) int {if n == 0 {return 1}return n * fact(n-1) //return中调用了fact函数,调用自己本身的函数称为递归
}func main() {fmt.Println(fact(7))//fib是一个函数类型的变量,接受一个int,返回一个int//func(n int)int 这是一个匿名函数,也是可以递归的,但在递归之前必须显示声明一个变量存储这个函数var fib func(n int) intfib = func(n int) int {if n < 2 {return n}return fib(n-1) + fib(n-2)}fmt.Println(fib(7))
}

输出:

go run post.go
5040
13
  • 这个匿名函数被赋值给 fib 变量。
  • 当 n 小于 2 时,函数直接返回 n(即当 n 为 0 时返回 0,n 为 1 时返回 1)。
  • 否则,函数通过递归调用 fib(n-1) 和 fib(n-2) 来计算斐波那契数列的值。

一句话总结:
递归函数就是在函数内部调用函数本身的函数。

斐波那契数列

这其实是一个数学问题,代码理解了,现在我们来看计算过程。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
像不像中学数学,一步一步套公式计算即可求的结果,程序是数学思路的体现。

递归算法注意

在使用递归算法时,有几点需要注意:

  1. 基本情况(Base Case):明确递归终止的条件,防止递归函数无限递归下去,导致栈溢出或无限循环。

  2. 递归调用:每次递归调用都应该让问题规模减小

  3. 内存消耗:递归算法可能会占用大量内存,因为每次递归调用都需要在内存中保存当前的状态

  4. 性能:递归调用会增加函数调用的开销,防止效率低下

  5. 优化:在一些情况下,可以考虑优化递归算法,例如通过记忆化搜索(Memoization)或动态规划(Dynamic Programming)减少重复计算,提高性能。

  6. 递归深度:递归算法的递归深度可能受到限制,因为每次递归调用都会占用栈空间。在设计递归算法时,需要考虑递归深度是否会超出系统限制。

  7. 可读性:递归算法有时可以更直观地表达问题的解决方案,但有时也可能使代码难以理解

掌握知识的最好方式就是教会别人,每篇文章都讲清楚一个知识点,欢迎留言我一起讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词