码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【愚公系列】2022年07月 Go教学课程 025-递归函数


    文章目录

    • 一、递归函数
      • 1.递归函数的基本使用
      • 3.相关案例
    • 总结


    一、递归函数

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

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

    构成递归的条件:

    • 子问题须与原始问题为同样的事,且更为简单
    • 不能无限制地调用本身,须有个出口,化简为非递归状况处理

    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
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    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)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    总结

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

    • 优点:结构清晰,可读性强,可以极大的减少代码量,用有限的语句来定义对象的无限集合。
    • 缺点:效率低,调用栈可能会溢出:函数每次调用都会在内存栈中分配空间,而每个进程的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致溢出。
  • 相关阅读:
    ELK集群设置密码
    阿里巴巴中国站按图搜索1688商品(拍立淘) API 返回值说明
    CSS 选择器的常见用法
    JavaAwtSwing布局 GridBagLayout和GridBagConstraints测试-220610
    R语言:主成分分析PCA
    k8s自定义Endpoint实现内部pod访问外部应用
    MS2401隔离Σ-Δ调制器,可替代ADI的AD7401
    XSS & CSRF
    使用docker搭建drogon windows10,linux,mac下开发环境
    MySQL分页查询的5种方法
  • 原文地址:https://blog.csdn.net/aa2528877987/article/details/126088815
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号