当前位置:网站首页>【愚公系列】2022年07月 Go教学课程 025-递归函数
【愚公系列】2022年07月 Go教学课程 025-递归函数
2022-07-31 18:44:00 【华为云】
一、递归函数
如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
构成递归的条件:
- 子问题须与原始问题为同样的事,且更为简单
- 不能无限制地调用本身,须有个出口,化简为非递归状况处理
1.递归函数的基本使用
package mainimport "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 mainvar s int = 1func main() { TestDemo(5) print(s)}func TestDemo(n int) { if n == 1 { return } s *= n TestDemo(n - 1)}
总结
递归就是一个函数在其内部可以调用其本身,那么这个函数就是递归函数即自己调用自己的函数
- 优点:结构清晰,可读性强,可以极大的减少代码量,用有限的语句来定义对象的无限集合。
- 缺点:效率低,调用栈可能会溢出:函数每次调用都会在内存栈中分配空间,而每个进程的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致溢出。
边栏推荐
- idea中搜索具体的字符内容的快捷方式
- 10 Ways to Keep Your Interface Data Safe
- MySQL common statements
- rj45对接头千兆(百兆以太网接口定义)
- 几款永久免费内网穿透,好用且简单(内网穿透教程)
- 使用 Flutter 和 Firebase 制作!计数器应用程序
- -xms -xmx(information value)
- IP protocol from 0 to 1
- multithreaded lock
- Given an ip address, how does the subnet mask calculate the network number (how to get the ip address and subnet mask)
猜你喜欢

1161. Maximum Sum of Elements in Layer: Hierarchical Traversal Application Problems

Kotlin coroutines: continuation, continuation interceptor, scheduler

认识异常 (看完这篇你就懂了)

【PIMF】OpenHarmony 啃论文俱乐部—盘点开源鸿蒙三方库【3】

MATLAB程序设计与应用 2.4 MATLAB常用内部函数

GAC Honda Safety Experience Camp: "Danger" is the best teacher

中文编码的设置与action方法的返回值

Basics of ResNet: Principles of Residual Blocks

Architect 04 - Application Service Encryption Design and Practice

MySQL---Subqueries
随机推荐
架构师04-应用服务间加密设计和实践
微信小程序的路由拦截
几款永久免费内网穿透,好用且简单(内网穿透教程)
【愚公系列】2022年07月 Go教学课程 023-Go容器之列表
Thymeleaf是什么?该如何使用。
spark报错OutOfMemory「建议收藏」
请问我的这段sql中sql语法哪里出了错
go记录之——slice
Unity 之 音频类型和编码格式介绍
MySQL---子查询
GateWay实现负载均衡
Apache EventMesh distributed event-driven multi-runtime
useragent怎么获取
How can we improve the real yourself, become an excellent architect?
How programmers learn open source projects, this article tells you
九齐ny3p系列语音芯片替代国产方案KT148A性价比更高420秒长度
【Yugong Series】July 2022 Go Teaching Course 022-Dictionary of Go Containers
给定一个ip地址,子网掩码怎么算网络号(如何获取ip地址和子网掩码)
Chinese encoding Settings and action methods return values
leetcode: 6135. The longest ring in the graph [inward base ring tree + longest ring board + timestamp]