看了那么多的函数递归的文章,看懂了但不会用,看看这篇吧!

简介: 看了那么多的函数递归的文章,看懂了但不会用,看看这篇吧!

   前言:看了那么多的函数递归的文章,看是看懂了,但是自己开始用函数递归解决题目的时候就发现自己怎么也想不出来,那么看看这篇文章吧!希望我的理解能对你有些许帮助。

1.了解什么是函数的递归

       ------其实不用想的太过于麻烦,其实只需要把函数的递归理解为在一个函数(比如函数A)里面在调用自己(函数A)就可以了,如图:

这里我以大家最最最熟悉的main函数为例子(开始学习编程的时候就学的main函数),就是在main函数里面再一次调用main函数这就叫做函数的递归。

2.理解递归的四把金斧头

       -------读者可以先理解一下,下文我会带着你更好的理解运用这四个理念:

(1)  函数递归是一个把复杂问题简单化的过程(大的问题-->小的问题)(这句话看起来是废话,但是非常的重要,希望读者好好记住一下)

(2)  递归递归,需要有一个终止它的条件,要不然它会一直递归下去

(3)  为了使递归停下来,就需要有不断靠近停下来这个条件的趋势(比如停止的条件使n==1,现在n==10,那么我们就需要让n减小,不断靠近 1 )

(4)  递归就会有函数,我们一定一定要知道我们这个函数的作用是什么(比如我弄一个函数Sum(n)-->这个函数的作用就是求 1 到 n 的和)(我们要时时刻刻记住这个函数是干什么用的)

3.用例子更好的理解递归

       -----我们先用网上都会使用的求n的阶乘来开始理解一下四把金斧头理念的理解:

首先我们先用四把金斧头来理解一下该怎么解决这个问题:

(1)  我们要将大的问题-->小的问题(求5!太难,那么求4!,也太难了,那求3!,也太难了,那求2!,还是太难了,那求1!,哎,1!就是 1 )

(你看我们把求5!这个大问题-->求1!这个根本不用算的小问题,这就是大的问题-->小的问题,那么我们求5! 不就是  求 4!在乘 5吗,5!== 5 * 4!)

(然后同理4!= 4 * 3!,3! = 3 * 2!,2! = 2 * 1!,只要知道1!,那么就全知道了)

(2)  要有条件限制它,而且还要不断靠近这个条件(n开始为5,根据(1)n从5-->4-->3-->2-->1,这样不就是越来越靠近限制条件了吗,我们就可以知道限制条件是n==1)

(3)我们要知道我们造的这个函数是干什么用的

如图:

在重点帮助读者理解一下Sum函数里面的内容:

(1)限制条件是n==1吧,求递归我们只需要把这个问题从大化到最简,求5!,那最简不就是求1!吗,所以我们问题大化小,并且把限制条件设为n==1。

(2)Sum函数就是用来求 1*2*3*...*n 的,else后面的 return n * Sum(n - 1) 根据题目不就是求 5 * 4!吗!(其实告诉读者一个小窍门,else后面 5 * 4!== 5!对吧,其实你就不要在往深里面思考了,只要这个等式成立 5!== 5 * Sum(4),而且有Sum函数就可以了,就不要在想后面怎么怎么样了,如果题目比较难往深里面想容易越想越糊涂)

希望我的这样子的讲解能让你有更好的理解,网上有很多用画图来解释这个递归的操作流程的,但是小编认为这不好,原因是:画图理解是很好,一步一步往下递,然后在归回来,但是我们在解题的时候不可能拿个纸和笔把所有的递归流程全画出来在解题吧(仅表达个人观点),所以这就是为什么小编不让读者深思的理由

在用经常看见的斐波那契数列举一下例子吧:

希望我的讲解能对你有帮助!!!

相关文章
|
运维 负载均衡 网络协议
从底层技术来看,GSLB 究竟难在哪儿
本文作者吕宏利来自硅谷的SRE,有着多年的国内外大型互联网公司运维开发经验,专注于分布式系统设计、监控、容量规划,数据中心技术以及生产环境的最佳实践。在本文中他将他将向读者介绍什么是GSLB,以及实现细节和维护方法。
9027 0
|
人工智能 弹性计算 安全
AMD产品介绍|通用型实例g8a
g8a实例:高性价比X86服务器,搭载最新CIPU架构,提供100G*2网络带宽和eRDMA支持。基于AMD Genoa平台,主频2.7/3.7GHz,专为性能、成本和稳定性需求设计。适用于通用应用、AI推理训练、高清视频处理等场景。实例性能提升25%,性价比提升15%,内置安全芯片,支持可信计算和机密计算。
|
弹性计算 Ubuntu Linux
AMD实例使用|AMD实例规格与操作系统兼容性说明
不同的AMD实例可能需要特定版本的驱动程序和内核来运行。购买AMD实例规格时,建议您使用官方支持的操作系统版本,以确保其包含适用于您的AMD实例的必要驱动程序和内核版本。本文主要说明不同代系的AMD实例与不同版本的操作系统镜像之间的兼容性。
分享82个Html经典模板,总有一款适合您
分享82个Html经典模板,总有一款适合您
244 0
|
12月前
|
数据安全/隐私保护 开发者
六、ArkTS 常用组件-按钮(Button)/切换按钮(Toggle)/文本输出(TextInput)
`Button` 组件是 HarmonyOS 应用开发中的基本组件之一,主要用于响应用户的点击操作。它支持两种使用方式:不包含子组件和包含子组件。不包含子组件时,`Button` 通过 `label` 属性设置按钮上的文字,同时提供 `options` 参数来配置按钮类型和点击效果;包含子组件的方式则允许更灵活的内容展示,如图片或复杂布局,此时无需设置 `label`。此外,`Button` 组件还提供了设置背景颜色、边框圆角等样式的方法,以及绑定点击事件的功能,使开发者能够轻松实现丰富的交互体验。
772 0
六、ArkTS 常用组件-按钮(Button)/切换按钮(Toggle)/文本输出(TextInput)
|
Python
anaconda和pycharm中安装pygame(最简单)
anaconda和pycharm中安装pygame(最简单)
1247 0
anaconda和pycharm中安装pygame(最简单)
|
存储 人工智能 运维
最新榜单 | 盘点2024年10大主流工单系统
随着互联网的发展,工单系统因其多样化功能和高效管理能力,成为企业运营的重要工具。本文介绍了10大主流工单系统,包括合力亿捷、阿里云服务中台、华为云ROMA ServiceCore等,它们各具特色,帮助企业提升服务质量和运营效率,实现数字化转型。
547 7
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
存储 缓存 安全
阿里云EMR数据湖文件系统: 面向开源和云打造下一代 HDFS
本文作者详细地介绍了阿里云EMR数据湖文件系统JindoFS的起源、发展迭代以及性能。
73082 79
|
iOS开发
分享83个Html经典模板,总有一款适合您
分享83个Html经典模板,总有一款适合您
304 7