递归的思路

简介: 今天给老铁们回顾一下递归的思路以及方法,也是给自己的一个归纳总结。

前言

今天给老铁们回顾一下递归的思路以及方法,也是给自己的一个归纳总结。

一、什么是方法递归?

所谓的方法递归,就是在一个方法(函数)执行的 内部自己调用了自己的过程,称之为 “递归” 。

递归分为两个子过程:
递过程:函数不断地调用自身,直到走到函数的终止条件,第一阶段结束。
归过程:函数不断地返回的过程。

例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件. 递归公式: 求 N! ,
直接不好求, 可以把问题转换成 N! => N * (N-1)!

示例:递归求N的阶乘

public static void main(String[] args) {
    int n = 5;
    int ret = factor(n);
    System.out.println("ret = " + ret);
}
public static int factor(int n) {
    if (n == 1) {
        return 1;
   }
    return n * factor(n - 1); // factor 调用函数自身
}
// 执行结果
ret = 120

二、什么场景下能用递归?

a.一个大问题(这个方法的功能)可以拆分成若干个子问题的解.

b.拆分后的子问题和原问题除了数据规模不同,解决思路完全相同.

c.必须存在递归的终止条件(不会无限拆分下去,一定能走到底~).

(看不懂先看下面(●ˇ∀ˇ●))

三、如何写出递归代码(重点)?

1.先考虑这个函数的==终止条件==

比如上面的栗子:求N的阶乘。
拿求5的阶乘做例子:
在这里插入图片描述
我们把大问题(5的阶乘)一直拆分到1的时候,问题无法继续拆分下去了,这个子问题就是这个递归的最终条件。
所以我们写代码的时候,可以先把最终条件写上:

if (n == 1) {
        return 1;
   }

2.假设这个函数已经写好了(==注意这个方法的语义==)

在写递归函数的时候,千万不要纠结这个函数内部是如何实现的,而是要注意这个函数有什么功能(假设这个函数别人已经写好了),我们把它当作一个黑盒子,你只是去调用这个函数罢了。

public static int factor(int n)

比如这个函数只能传入一个n,目前我们只能知道这个n是多少,而n的阶乘等于n* [(n-1)!],但是我们并不知道n-1的阶乘是多少,那么就调用这个别人写好的“黑盒子”。这个黑盒子的功能可以实现某个数的阶乘

n * factor(n - 1) // n*黑盒子

==说白了就是,把这个factor函数当作别人已经写好了,你只需要关注如何去调用这个方法去辅助你解决问题就可以了!==

总结

写出递归其实=终止条件+利用黑盒子去解决剩下的问题,注意传入的参数就可以很快把递归代码写出来(●ˇ∀ˇ●)。老铁们如果有帮助的话记得三连哟~

相关文章
|
前端开发 关系型数据库 MySQL
基于python+mysql的宠物领养网站系统
基于python+mysql的宠物领养网站系统
270 2
|
消息中间件 NoSQL JavaScript
用 Redis 实现延迟队列,我研究了两种方案,发现并不简单 下
用 Redis 实现延迟队列,我研究了两种方案,发现并不简单 下
|
小程序 API UED
微信小程序|音频音乐播放控制
微信小程序|音频音乐播放控制
572 0
|
存储 弹性计算 编解码
阿里云第七代服务器c7、g7和r7处理器CPU性能测评
阿里云ECS服务器c7、g7和r7第七代Intel Xeon(Ice Lake) Platinum 8369B,阿里云服务器ECS计算型c7、ECS通用型g7和内存型r7实例,CPU处理器采用第三代Intel® Xeon®可扩展处理器(Ice Lake),基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定
1132 0
|
存储 算法 安全
小知识随手记:MD5加密与SHA-1加密
小知识随手记:MD5加密与SHA-1加密
小知识随手记:MD5加密与SHA-1加密
|
Unix Linux C++
23. 请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
23. 请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
157 0
23. 请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
|
网络协议 Java Unix
Java基础之网络编程(一)(上)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
186 0
|
机器学习/深度学习 存储 分布式计算
机器学习技术在亲宝宝的业务应用
亲宝宝以MaxCompute的计算和存储能力为依托,构建了整个大数据链路,数据源包括了APP的埋点、Nginx、CDN。使用阿里云的日志服务、流计算、函数计算、DTS等将数据导入到MaxCompute中,在MaxCompute进行数据加工,在这个基础上快速构建用户圈选、BI报表、机器学习和个性化推荐等相关应用。
2382 0
机器学习技术在亲宝宝的业务应用
|
存储 NoSQL 关系型数据库
MySQL基础架构和执行流程分析
MySQL基础架构和执行流程分析
174 0
|
SQL 数据库 Python
Django数据库基础操作
主键: 是唯一的,通过主键可以准确的找到对应的数据,主键默认非空,为空时自动增长准备sqlite语句: db=sqlite3.connect('xxxxx.db') 创建表格文件: cerate table 表名(字段1名称 字段1类型,字段2名称 字段2类型),例: sql='cerate ta...