递归的概述

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

递归的分类:

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

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

递归的注意事项

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

 package demosummary.recursive;

 public class RecursiveDemo1 {
public static void main(String[] args) {
//调用a方法
a(1);
//调用b方法
b();
} private static void a(int i) {
System.out.println(i);
//添加一个条件避免发生内存溢出现象
if (i == 10) {
return;
}
a(++i);
} //没有限制条件,会发生内存溢出现象
private static void b() {
System.out.println("b方法");
b();
}
}

递归累加求和

 package demosummary.recursive;

 /**
* 计算1~n的和
* 分析:
* num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用
*/
public class RecursiveSum {
public static void main(String[] args) {
int sum = getSum(5);
System.out.println(sum);
} private static int getSum(int num) {
if (num == 1) {
return 1;
}
return num+getSum(num -1);
}
}

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

 package demosummary.recursive;

 public class RecursiveFactorial {
public static void main(String[] args) {
int sum = getSum(5);
System.out.println(sum);
} private static int getSum(int num) {
//当num=1时,停止递归,防止发生内存溢出现象
if (num == 1) {
return 1;
}
return num * getSum(num - 1);
}
}

递归打印多级目录

 package demosummary.recursive;

 import java.io.File;

 public class RecursivePrintDir {
public static void main(String[] args) {
//创建File对象
File file = new File(".//filter");
//调用打印方法
printDir(file);
} private static void printDir(File dir) {
//获取目录的集合
File[] files = dir.listFiles();
//循环打印目录
for (File file : files) {
if (file.isFile()) {//判断是否为文件
System.out.println("文件的路径:" + file.getAbsolutePath());
} else {//判断是否为目录
System.out.println("目录的路径:" + file.getAbsolutePath());
//是目录则继续往下打印
printDir(file);
}
}
}
}

递归---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. Delphi-基础(for循环)

    1.判断0~10之间,当循环I=3时候跳出当前循环,当I等于8时候,退出当前循环. procedure Countand(); var I: Integer; begin do begin Write ...

  2. 简易解说拉格朗日对偶(Lagrange duality)(转载)

    转载自https://www.cnblogs.com/90zeng/p/Lagrange_duality.html,本人觉得讲的非常好! 1.原始问题 假设是定义在上的连续可微函数(为什么要求连续可微 ...

  3. Invitation Cards POJ - 1511

    题目链接:https://vjudge.net/problem/POJ-1511 思路:题目意思就是,从1出发到所有城市,再从所有城市回到1的最短时间. 那么我们只要正跑一次图,然后反向存边,再跑一次 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  5. 【转载】Makedown数学公式语法

    Typora数学模块 行间表达式快捷键($$) 点击"段落"->"公式块" 快捷键Ctrl+Shift+m "$$"+回车 行内表达式 ...

  6. Vue小练习(for循环,push方法,冒泡,if判断(以及与for循环的连用),按钮高亮,根据input框筛选数据)

    vue练习 ''' 1. 先有一下成绩单数据 scores = [ { name: 'Bob', math: 97, chinese: 89, english: 67 }, { name: 'Tom' ...

  7. UrlRouting原理笔记

    UrlRouting路由流程: 添加路由:可以通过调用MapRoute().MapPageRoute(),它们内部都是创建Route对象,最终添加到RouteCollection中. 还可以使用[Ro ...

  8. Taro/微信小程序解析XML

    npm i xmldom PS: https://www.npmjs.com/package/xmldom https://blog.csdn.net/caojie1008/article/detai ...

  9. navicat密码错误的问题

    上集说到我的navicat打不开对吧..‘ 这下就来聊聊打开了的问题 下午非常开心,就打开了mysql的图形化界面, 但是,在我连接数据库的时候就报错了 错误就是密码错误那行 什么什么‘localho ...

  10. 爬虫-js

    js的RSA加密 var encrypt = new JSEncrypt(); encrypt.setPublicKey(publickey);  # publickey是已知的 encrypt.en ...