2018.3.31 java中的递归

java中的递归

1.概念

    定义一个方法时,出现本方法调用本方法的过程,称之为递归

2.特点

    必然有一个边界条件
    使用递归代码往往更简洁,可读性强

3.什么时候使用递归

n的阶乘和n的累加定义

    f(n) =1
    f(n)=f(n)*f(n-1)

4.普通实现与递归实现的比较

普通实现
    //计算5的阶乘
    public class Demo {
    public static void main(String[] args) {
        int sum = 1;
        for (int i =5; i >=1; i--) {
            sum *= i;
        }
        System.out.println(sum);
    }
}

递归实现:
/**
 *在main函数外面定义方法,不然会报错
 *
 * 计算5的阶乘(result = 5*4*3*2*1)
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(f(5));
    }
    public static int f(int n) {
        if (1 == n){
            return 1;
        }else{
            return n * f(n - 1);
        }
    }
}

6.按照递归的三个条件来分析

    边界条件:阶乘,乘到最后一个数,返回1,程序执行到底
    递归前进段:当前的参数不等于1的时候,继续调用自身;
    递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5*4,即5*(5-1)即n*(n-1)

7.经典递归算法实例----斐波那契数列

package com.lanqiao.demo2;

/**
 * 斐波那契序列
 *
 * @author qichunlin
 *
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(f(4));
        }

    public static int f(int n){
        if(n==1||n==2){
            return 1;
        }else{
            return f(n-1)+f(n-2);
        }
    }
}

原文地址:https://www.cnblogs.com/qichunlin/p/8684345.html

时间: 2024-09-28 01:10:56

2018.3.31 java中的递归的相关文章

Java中的递归调用

Java中不合理的使用递归调用,可能会导致栈内存溢出,这点是需要注意的. java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法的运行状态. 也就是我们常说的方法栈.最后一个为当前运行的栈帧. 那么每一次方法调用会为新调用方法的生成一个栈帧,保存当前方法的栈帧状态,栈帧上下文切换,切换到最新的方法栈帧. 在递归和循环之间选择时,应该优先选择的是循环而非递归,特别是要避免深度的递归. 关于递归还需要了解的是尾递归调用,尾递归调用是可以被进行优化的. 尾调用指的是一个方法或

Java中的递归原理分析

解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的三个条件: 边界条件 递归前进段 递归返回段 当边界条件不满足时,递归前进:当

转(Java中的递归思想)

解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的三个条件: 边界条件 递归前进段 递归返回段 当边界条件不满足时,递归前进:当

Java中方法递归与File例题

1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?(不死神兔)(1)数组方式 package 递归.作业; public class TuziArray { public static void main(String[] args) { //定义数组 int arr[] = new int[100]; int m=20; arr[1] = 1;//前两个月兔子数量为1只 arr[2] = 1; arr[3

Java中的递归思想

转自:https://www.cnblogs.com/xiaosen992608/p/4037682.html 递归: 递归的概念:方法自身调用自身则称为递归. 递归的分类: 间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A. 直接递归: 方法A调用方法A.(常用) 递归的注意事项: 递归一定要出口:结束递归的条件. 递归次数不要太多. 如果递归不结束,则会报错. java.lang.StackOverflowError: 栈内存溢出错误 递归会内存溢出隐患的原因: 方法不停地进栈

面试中常见的算法之Java中的递归

1.方法定义中调用方法本身的现象2.递归注意实现 1) 要有出口,否则就是死递归 2) 次数不能太多,否则就内存溢出 3) 构造方法不能递归使用3.递归解决问题的思想和图解: 分解和合并[先分解后合并] 1. 常见的斐波那契数列 1,1,2,3,5,8,13,21,...特征: 从第三个数开始,每个数是前两个数的和. int count = 0; private int getFibo(int i) { if (i == 1 || i == 2) { count = count+1; Syste

java中的递归

递归算法的基本思想就是"自己调用自己",一个使用递归技术的方法将会直接或间接的调用自己. 递归需要满足两点: 1)定义递归头:说白了就是条件,在什么时候不去调用了,如果没有条件,则会陷入死循环. 2)要有递归体:就是什么时候调用自己. 例子:100的阶乘 /** * 计算20的阶乘 */ public class Recursion { static long factorial(int n){ if(n==1) { //递归头 return 1; } else { //递归体 ret

java中IO递归写入

package cn.stat.p1.file; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class textdemo { /** * @param

java中的递归思想及应用

递归就是自己调自己,最需要注意的就是结束条件,否则可能就是死循环,导致内存溢出 public T a(Object x,Object y) { if(条件true) { a(x1,y1); } else { return f(x,y); } } 例如: 1.求阶乘 5!=5x4x3x2x1 分析:递归是一层一层推进,第一层是 5*4,第二层4*3,第三层,3*2,递归入参分别是5,4,3,2,1,当为1时返回1,递归终止 public int f(n) { if(n=1) { return 1: