写点什么

【愚公系列】2022 年 10 月 Go 教学课程 025- 递归函数

作者:愚公搬代码
  • 2022 年 10 月 11 日
    福建
  • 本文字数:652 字

    阅读完需:约 2 分钟

一、递归函数

如果一个函数在内部调用自身本身,这个函数就是递归函数。


递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。


构成递归的条件:


  • 子问题须与原始问题为同样的事,且更为简单

  • 不能无限制地调用本身,须有个出口,化简为非递归状况处理

1.递归函数的基本使用

package main
import "fmt"
func main() { c:=Test(3) fmt.Println(c)}func Test(n int) int { // 只有第一排的人才知道自己的排数 if n == 1{ return 1 } // 如果不是第一排,问一下前一排的人 r := Test(n-1) fmt.Println("前一排的排数:",r) // 把前一排人的排数+1,计算出自己的排数。 return r+1}
复制代码


3.相关案例

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且 0 的阶乘为 1。自然数 n 的阶乘写作 n!。1808 年,基斯顿·卡曼引进这个表示法。亦即 n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。


package main
var s int = 1
func main() { TestDemo(5) print(s)}func TestDemo(n int) { if n == 1 { return } s *= n TestDemo(n - 1)}
复制代码


总结

递归就是一个函数在其内部可以调用其本身,那么这个函数就是递归函数即自己调用自己的函数


  • 优点:结构清晰,可读性强,可以极大的减少代码量,用有限的语句来定义对象的无限集合。

  • 缺点:效率低,调用栈可能会溢出:函数每次调用都会在内存栈中分配空间,而每个进程的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致溢出。

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年10月 Go教学课程 025-递归函数_10月月更_愚公搬代码_InfoQ写作社区