服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java 方法递归的思路详解

Java 方法递归的思路详解

2022-11-12 14:16Killing Vibe Java教程

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。但是如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件,接下来讲解一下学习递归的思路

前言

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

一、什么是方法递归

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

递归分为两个子过程:

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

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

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

示例:递归求N的阶乘

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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.必须存在递归的终止条件(不会无限拆分下去,一定能走到底~).

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

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

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

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

拿求5的阶乘做例子:

Java 方法递归的思路详解

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

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

?
1
2
3
if (n == 1) {
        return 1;
   }
  • 假设这个函数已经写好了(注意这个方法的语义)

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

?
1
public static int factor(int n)

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

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

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

总结

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

到此这篇关于Java 方法递归的思路详解的文章就介绍到这了,更多相关Java 递归内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_43575801/article/details/124029190

延伸 · 阅读

精彩推荐
  • Java教程Java最常用的6个简单的计算题

    Java最常用的6个简单的计算题

    本篇文章给大家整理的在JAVA中最常用到的简单的计算题,对此有兴趣的朋友可以测试参考下。...

    彬菌7002021-04-07
  • Java教程java实现文件复制上传操作

    java实现文件复制上传操作

    这篇文章主要为大家详细介绍了java实现文件复制上传操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    qq_272986873182020-07-08
  • Java教程idea中将单个java类导出为jar包文件的方法

    idea中将单个java类导出为jar包文件的方法

    这篇文章主要给大家介绍了关于idea中将单个java类导出为jar包文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...

    等你归去来5582021-06-01
  • Java教程Java常用的时间工具类实例

    Java常用的时间工具类实例

    这篇文章主要介绍了Java常用的时间工具类,结合具体实例形式分析了java日期时间的常用转换、判断、输出相关操作技巧,需要的朋友可以参考下...

    qq73422721932020-11-12
  • Java教程Java并发系列之Semaphore源码分析

    Java并发系列之Semaphore源码分析

    这篇文章主要为大家详细介绍了Java并发系列之Semaphore源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    劳夫子6692021-04-07
  • Java教程java string类型转换boolean类型的方法

    java string类型转换boolean类型的方法

    下面小编就为大家带来一篇java string类型转换boolean类型的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    jingxian5572020-07-05
  • Java教程Java并发编程示例(三):线程中断

    Java并发编程示例(三):线程中断

    这篇文章主要介绍了Java并发编程示例(三):线程中断,在本节,我们所开发的示例程序将会创建一个线程,五秒钟后,利用中断机制强制中止这个线程,需要的朋...

    junjie5072019-12-06
  • Java教程Java回调函数与观察者模式实例代码

    Java回调函数与观察者模式实例代码

    这篇文章主要介绍了Java回调函数与观察者模式实例代码,简单介绍了使用观察者模式的场景,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴...

    司马懿字仲达7302021-03-30