递归算法的理解

前言第一次接触递归是大一C语言课程, 过了这么久,当时讲了啥已经忘记得差不多了, 但递归倒是从当时的一无所知到了现在的略知一二, 因此想把我自己对递归的理解拿出来跟大家分享一下, 希望这是一篇有帮助的文章。其中有个小窍门也会分享给大家,如有大佬觉得有问题, 还请直接指出什么是递归算法定义部分人将递归定义成: 直接或间接调用自身的算法。但实际上这句话只凸显了“递归”二字中的“递”字, 而没有体现出“归”字。那么什么是递归?递归实际上就像是“俄罗斯套娃”:把一个大型问题转化成与原...
摘要由CSDN通过智能技术生成

前言

第一次接触递归是大一C语言课程, 过了这么久,当时讲了啥已经忘记得差不多了, 但递归倒是从当时的一无所知到了现在的略知一二, 因此想把我自己对递归的理解拿出来跟大家分享一下, 希望这是一篇有帮助的文章。其中有个我认为很有用的技巧,  如有大佬觉得有问题, 还请直接指出

什么是递归算法 

定义

部分人将递归定义成: 直接或间接调用自身的算法。但实际上这句话只凸显了“递归”二字中的“递”字, 而没有体现出“归”字。那么什么是递归? 递归实际上就像是“俄罗斯套娃”:

  • 把一个大型问题转化成与原问题同类型的小问题(如同套娃,大的套小的, 两者的结构功能是一样的, 但是问题大小不同), 然后拆解成更小的问题
  • 当子问题无法进行再拆时, 就可以解决最小的问题, 然后再回归到次小的问题中解决次小的问题, 一直回归到最开始要求的问题,解决即可(如同套娃拆开之后的又装回去,最小的装完装次小的, 直到最外层套娃装好就解决问题)

三要素

递归的三要素是指, 当用递归解决问题时, 一般都从这三个方面去分析考虑以及定义

  • 函数功能:递归函数首先它是一个函数, 不论什么函数都有自己明确的功能,即明确的知道这个函数是干嘛用的, 比如:比较函数的功能就是比较两个数的大小
  • 终止条件:递归不可能无限递归下去(就像套娃总得有最小的一个),无论是从执行时的内存考虑还是想要求原问题结果考虑, 都需要找到一个终止条件用以结束递归,逐次返回最上层.不妨以求阶乘为例来讲解, 我们要求n的阶乘, 就要求n - 1的阶乘(result = n * f(n - 1), f(n - 1)表示求n - 1的阶乘), 要求n - 1的阶乘就要求n - 2的阶乘...以此类推。到最后, 求2的阶乘和求1的阶乘时, 可以直接计算出结果, 所以不需要再往下递归(即小于等于2)
def func(n):
    if n <= 2:       # 终止条件
 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

索利亚噶通

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值