Java 方法递归的思路详解(java培训学校)

网友投稿 262 2022-08-04


Java 方法递归的思路详解(java培训学校)

目录前言一、什么是方法递归二、什么场景下能用递归三、如何写出递归代码-重点总结

前言

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

一、什么是方法递归

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

递归分为两个子过程:

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

例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件. 递归公式: 求 N! ,

直接不好求, 可以把问题转换成 N! => N * (N-1)!

示例:递归求N的阶乘

public static void main(String[] args) {

int n = 5;

int ret = factor(n);KovUDlS

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.必须存在递归的终止条件(不会无限拆分下去,一定能走到底~).

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

三、如何写出递归代码-重点

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

比如上面的栗子:求N的阶乘。

拿求5的阶乘做例子:

我们把大问题(5的阶乘)一直拆分到1的时候,问题无法继续拆分下去了,这个子问题就是这个递归的最终条件。

所以我们写代码的时候,可以先把最终条件写上:

if (n == 1) {

return 1;

}

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

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

public static int factor(int n)

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

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

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

总结

写出递归其实=终止条件+利用黑盒子去解决剩下的问题,注意传入的参数就可以很快把递归代码写出来(●∀●)。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot项目改为SpringCloud项目使用nacos作为注册中心的方法(springcloud+nacos)
下一篇:Java 详细讲解线程安全与同步附实例与注释(java培训学校)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~