java递归算法实例分析
作者:街灯下的小草 发布时间:2022-02-09 07:59:17
标签:java,递归算法
递归算法设计的基本思想是:
对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
在做递归算法的时候,一定要把握住出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口是非常好理解的,就是一个条件,当满足了这个条件的时候我们就不再递归了。
关键要抓住的是:
(1)递归出口
(2)地推逐步向出口逼近
递归就是方法自身调用自身的行为,注意要写好递归头,也就是什么时候退出递归,
避免出现死循环。
实例1,通过递归打印1~100
package com.lanhuigu.base;
public class CursionTest {
private static int i = 0;
/**
* 递归打印1到100
*/
public static void testCursion01() {
i++;
// 自增
if (i <= 100) {
// 小于等于100时回调,否则跳出回调,避免死循环
System.out.println(i);
testCursion01();
// 回调: 自身调用自身
} else {
System.out.println("Game Over!");
}
}
public static void main(String[] args) {
testCursion01();
// 打印1~100
}
}
实例2,通过递归计算某个数的阶乘
package com.lanhuigu.base;
public class CursionTest {
/**
* 递归计算某个数的阶乘
*/
public static int testFactorial(int n) {
if (n == 1) {
return 1;
} else {
return n*testFactorial(n-1);
}
}
public static void main(String[] args) {
System.out.println(testFactorial(5));
// 计算5的阶乘
}
}
关于递归计算阶乘,递归内存分析结构图:
先放长线,最后收线,然后把鱼拉上岸。
来源:http://blog.csdn.net/yhl_jxy/article/details/54976532


猜你喜欢
- 前一篇文章《C#影院售票系统毕业设计(2)》中总结了动态绘制控件、票类型的切换以及数据在窗体中的展现。今天继续总结!本文总结项目中最核心的部
- 实现原理在之前的文章中,我们介绍了普通的帐号密码登录的方式: SpringBoot + Spring Security 基本使用及个性化登录
- 一、定义一个配置类,自定义RedisTemplate的序列化方式@Configurationpublic class RedisConfig
- SpringBoot 项目启动之后执行自定义方法的两种方式在测试配置中心的配置时,想在项目启动成功之后打印配置项,然后需要执行自定义的类一般
- 在Android studio实现简易计算器App并实现加减乘除功能,供大家参考,具体内容如下结果activity_main.xml<
- 一、函数和变量的多文件问题.h: 头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header).c : 源文件,一般包含函数实现
- 实际上java已经提供线程池的实现 ExecutorService。为了更方便的使用和管理。这里提供一个线程池工具类,方便大家的使用。直接看
- 1、简介应客户要求为了是特殊定制的系统更具安全,系统ROM需要使用自己定义的签名,还有一些特殊的场景也会更改系统的签名比如在过cts认证测试
- 静态方法和非静态方法的区别:1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用;2.静态方法只能访问静态成员和方法,非
- 前言我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题。如下一段代码:System.out.println(0.05 + 0.01);
- 本文实例为大家分享了OpenCV实现直线检测并消除的具体代码,供大家参考,具体内容如下很简单,代码如下#include<iostrea
- Spring P标签的使用Spring的p标签是基于XML Schema的配置方式,目的是为了简化配置方式。由于Spring的p标签是spr
- 本系列文章会根据项目的进度进行相关介绍,其会分为多个模块,每个模块互不依赖,各个模块都是单独的学习内容,如sqlite学习模块,contac
- 目录1、下列四项中,不属于数据库系统的特点的是( )2、一个学生可以同时借阅多本书,一本书只能由一个学生借阅,学生和图书之间为 ( ) 联系
- 一. BigInteger类1. 简介在之前给大家讲解8种基本类型时就说过,不同的数据类型,有不同的取值范围,我们再通过下表回顾一下:类型所
- 日常工作中 Map 绝对是我们 Java 程序员高频使用的一种数据结构,那 Map 都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经
- 大家好,我是老三,Spring是我们最常用的开源框架,经过多年发展,Spring已经发展成枝繁叶茂的大树,让我们难以窥其全貌。这节,我们回归
- 数组数组时相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成其中,每一个数据称作一个数组元素,每一个数组
- 有哪些“纪律”是Java程序员所要遵守的?1. 为代码添加注释(Add comments to your code). – 每个人都知道这一
- 简介相信大家有配置过多数据源,或者即将配置多数据的朋友们,会发现网上大概有以下几种方案:1. 使用 AOP 切片进行动态数据源切换2. 使用