递归的概述

  递归:指在当前方法内自己调用自己的方式叫做递归

递归的分类:

  1.直接递归称为方法自身调用自己。

  2.间接递归可以用A方法调用B方法,用B方法调用C方法,用C方法调用A方法。

递归的注意事项

  递归一定要有限定条件,保证递归能够停止下来,否则会出现死循环,导致发生栈内存溢出。 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。   构造方法,禁止递归

  1. package demosummary.recursive;
  2.  
  3. public class RecursiveDemo1 {
  4. public static void main(String[] args) {
  5. //调用a方法
  6. a(1);
  7. //调用b方法
  8. b();
  9. }
  10.  
  11. private static void a(int i) {
  12. System.out.println(i);
  13. //添加一个条件避免发生内存溢出现象
  14. if (i == 10) {
  15. return;
  16. }
  17. a(++i);
  18. }
  19.  
  20. //没有限制条件,会发生内存溢出现象
  21. private static void b() {
  22. System.out.println("b方法");
  23. b();
  24. }
  25. }

递归累加求和

  1. package demosummary.recursive;
  2.  
  3. /**
  4. * 计算1~n的和
  5. * 分析:
  6. * num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用
  7. */
  8. public class RecursiveSum {
  9. public static void main(String[] args) {
  10. int sum = getSum(5);
  11. System.out.println(sum);
  12. }
  13.  
  14. private static int getSum(int num) {
  15. if (num == 1) {
  16. return 1;
  17. }
  18. return num+getSum(num -1);
  19. }
  20. }

递归求阶乘(同求和一样解法)

  1. package demosummary.recursive;
  2.  
  3. public class RecursiveFactorial {
  4. public static void main(String[] args) {
  5. int sum = getSum(5);
  6. System.out.println(sum);
  7. }
  8.  
  9. private static int getSum(int num) {
  10. //当num=1时,停止递归,防止发生内存溢出现象
  11. if (num == 1) {
  12. return 1;
  13. }
  14. return num * getSum(num - 1);
  15. }
  16. }

递归打印多级目录

  1. package demosummary.recursive;
  2.  
  3. import java.io.File;
  4.  
  5. public class RecursivePrintDir {
  6. public static void main(String[] args) {
  7. //创建File对象
  8. File file = new File(".//filter");
  9. //调用打印方法
  10. printDir(file);
  11. }
  12.  
  13. private static void printDir(File dir) {
  14. //获取目录的集合
  15. File[] files = dir.listFiles();
  16. //循环打印目录
  17. for (File file : files) {
  18. if (file.isFile()) {//判断是否为文件
  19. System.out.println("文件的路径:" + file.getAbsolutePath());
  20. } else {//判断是否为目录
  21. System.out.println("目录的路径:" + file.getAbsolutePath());
  22. //是目录则继续往下打印
  23. printDir(file);
  24. }
  25. }
  26. }
  27. }

递归---Day29的更多相关文章

  1. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

  2. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

  3. Android 算法 关于递归和二分法的小算法

     // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...

  4. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  5. 递归实现n(经典的8皇后问题)皇后的问题

    问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...

  6. C语言用分别用递归和循环求数字的阶乘的方法

    以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...

  7. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  8. Java之递归求和的两张方法

    方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...

  9. C#语言基础——递归

    递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...

随机推荐

  1. python安装thrift-sasl提示缺少sasl.h文件

    这其实是在pip安装Cyrus-SASL bindings for Python时报的错误. 由于没有whl文件,都是源码要经过编译之后才能安装. 所以,报这个错误,一般都是缺少安装软件造成的. 不管 ...

  2. 【Spring IoC】IoC介绍(一)

    IoC(Inversion of Control)的职责:原先由程序员主动通过new实例化对象这个事情,现在交由Spring负责,即由IoC容器负责. Spring 容器是 Spring 框架的核心. ...

  3. CF1076D Edge Deletion 最短路树

    问题描述 Codeforces 洛谷(有翻译) 题解 最短路树,是一棵在最短路过程中构建的树. 在\(\mathrm{Dijkstra}\)过程中,如果最终点\(y\)是由点\(x\)转移得到的,则在 ...

  4. [LeetCode] 829. Consecutive Numbers Sum 连续数字之和

    Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers? ...

  5. [LeetCode] 642. Design Search Autocomplete System 设计搜索自动补全系统

    Design a search autocomplete system for a search engine. Users may input a sentence (at least one wo ...

  6. kali linux2019.4 设置中文字体教程

    最近Kali linux更新到了2019.4版本,下载下来发现找不到设置中文的选项,经过在网上搜索一番发现一个开源的汉语字体包:文泉驿字体 在终端中输入以下命令 apt-get install ttf ...

  7. python总结十一

    1.python运行速度慢的原因: python不是强类型的语言,所以解释器运行时遇到变量以及数据类型转换,比较操作,引用变量时都需要检查其数据类型 python的编译器启动速度比java快,但几乎每 ...

  8. GreenPlum 大数据平台--集群恢复

    一,问题描述 :::: gpinitstandby:greenplum01:gpadmin-[ERROR]:-Cannot use -n option when standby master has ...

  9. .NET Core:SignalR

    在Startup中的ConfigureServices方法中配置:services.AddSignalR(); 跨域设置中需要更改设置:services.AddCors(options => o ...

  10. 到底如何选择PHP框架?Yii、ThinkPHP、laravel、CI.

    如果你是为了工作和就业,你应该选择框架以工作为目标,看公司里面未来招聘中用的最多的是什么框架.很简单的判断方式 很多朋友都不知道如何去选择框架,选择框架的时候就会很纠结.到底该学什么框架,选择什么框架 ...